这是我的代码:
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString("https://stats.quake.com/api/v2/Player/Stats");
builder.queryParam("name", "D&M na1x");
log.info("encoded link: {}", builder.toUriString());
log.info("response: {}", restTemplate.getForObject(
builder.toUriString(), String.class));
并提供以下输出:
encoded link: https://stats.quake.com/api/v2/Player/Stats?name=D%26M%20na1x
response: {"code":404,"message":"No results found."}
链接的编码正确,可以在浏览器和其他客户端(chrome扩展程序)中使用。我认为查询参数(名称)有问题,因为它适用于我测试过的所有其他缺口(例如lIlIlIlIlIl
或myztro RAISY
)。我的猜测是&
字符有问题,但URL看起来正确。有什么想法怎么了?当然,我尝试为对象分配响应,但是它返回null。
答案 0 :(得分:0)
查看一些文档和其他用户对SO的抱怨,看来UriComponentsBuilder
只是对整个URI进行编码,而不是对查询参数值进行专门编码。
尝试自己进行编码:builder.queryParam("name", URLEncoder.encode("D&M na1x","UTF-8"));