小编Muk*_*thi的帖子

春天的UriComponentsBuilder.queryParam问题

我最近改用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());
Run Code Online (Sandbox Code Playgroud)

此代码的输出是:

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
Run Code Online (Sandbox Code Playgroud)

问题出在最终的builder.queryParam上。我得到这样的输出:

sysparm_query%3Duser_name=AX0011
Run Code Online (Sandbox Code Playgroud)

但我想要的是:

sysparm_query=user_name=AX0011
Run Code Online (Sandbox Code Playgroud)

这样最终的最终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
Run Code Online (Sandbox Code Playgroud)

所以我尝试更换

builder.queryParam("sysparm_query=user_name", snUser.getUser_name());
Run Code Online (Sandbox Code Playgroud)

通过:

builder.query("sysparm_query=user_name=" + snUser.getUser_name());
Run Code Online (Sandbox Code Playgroud)

从以下更改了原始输出:

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
Run Code Online (Sandbox Code Playgroud)

至: …

java rest spring

3
推荐指数
1
解决办法
7309
查看次数

标签 统计

java ×1

rest ×1

spring ×1