gpt4 book ai didi

java - Spring 的 UriComponentsBuilder.queryParam 问题

转载 作者:行者123 更新时间:2023-12-03 18:09:54 36 4
gpt4 key购买 nike

我最近切换到 Spring 来使用 ServiceNow 托管的 REST API 调用。

我正在构建我的 URI,如下所示:

UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(baseUrl.toString());
logger.info("URI before Query Param: " + builder.build().encode().toUri());
builder.queryParam("sysparm_limit", "2000000");
builder.queryParam("sysparm_offset", "0");
builder.queryParam("sysparm_exclude_reference_link", "true");
//this line is the issue because there is a = sign here
builder.queryParam("sysparm_query=user_name", snUser.getUser_name());
logger.info("URI after Query Param: " + builder.build().encode().toUri());

这段代码的输出是:
INFO: URI before Query Param: https://sandbox.service-now.com/api/now/v1/table/sys_user
INFO: URI after Query Param: https://sandbox.service-now.com/api/now/v1/table/sys_user?sysparm_limit=2000000&sysparm_offset=0&sysparm_exclude_reference_link=true&sysparm_query%3Duser_name=AX0011

问题在于最终的 builder.queryParam。我得到这样的输出:
sysparm_query%3Duser_name=AX0011

但我想要的是:
sysparm_query=user_name=AX0011

所以最终最终的 URI 如下所示:
INFO: URI after Query Param: https://sandbox.service-now.com/api/now/v1/table/sys_user?sysparm_limit=2000000&sysparm_offset=0&sysparm_exclude_reference_link=true&sysparm_query=user_name=Z001NR6

所以我尝试更换,
builder.queryParam("sysparm_query=user_name", snUser.getUser_name());

经过:
builder.query("sysparm_query=user_name=" + snUser.getUser_name());

它改变了原始输出:
INFO: URI after Query Param: https://sandbox.service-now.com/api/now/v1/table/sys_user?sysparm_limit=2000000&sysparm_offset=0&sysparm_exclude_reference_link=true&sysparm_query%3Duser_name=Z001NR6

到:
INFO: URI after Query Param: https://sandbox.service-now.com/api/now/v1/table/sys_user?sysparm_limit=2000000&sysparm_offset=0&sysparm_exclude_reference_link=true&sysparm_query=user_name%3DZ001NR6

请注意 sysparm_query%3Duser_name=Z001NR6 如何更改为 sysparm_query=user_name%3DZ001NR6

无论如何在输出中看到 = 而不是 %3D 吗?

最佳答案

该参数看起来很奇怪 - 但是 - 您可以使用 UriComponentsBuilder#query 手动添加它方法:

UriComponentsBuilder builder = UriComponentsBuilder
.fromHttpUrl("https://example.com/api/")
.queryParam("param1", "12345")
.queryParam("param2", "abc")
.query("query=username=JOE");

System.out.println(builder.build().toString());
// produces https://example.com/api/?param1=12345&param2=abc&query=username=JOE

System.out.println(builder.build().encode().toString());
// produces https://example.com/api/?param1=12345&param2=abc&query=username%3DJOE

手动串联:
UriComponentsBuilder builder = UriComponentsBuilder
.fromHttpUrl("https://example.com/api/")
.queryParam("param1", "12345")
.queryParam("param2", "abc");
// the parameter has to be properly url-encoded manually (not shown here)
String uri = builder.build().encode().toString() + "&query=username=JOE";

System.out.println(uri);
// produces: https://example.com/api/?param1=12345&param2=abc&query=username=JOE

关于java - Spring 的 UriComponentsBuilder.queryParam 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36135344/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com