restemplate交换在get调用时失败,但在curl上工作

zlhcx6iw  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(506)

我在curl有下面的电话

curl -X GET 'https://us.api.blizzard.com/profile/wow/character/kiljaeden/n%C3%B8m?access_token=123&namespace=profile-us&locale=en_US'

但是下面的java代码给出了404错误

String testurl = "https://us.api.blizzard.com/profile/wow/character/kiljaeden/n%C3%B8m?access_token=123&namespace=profile-us&locale=en_US";

RestTemplate restTemplate = new RestTemplate();

String out = restTemplate.getForObject(testurl, String.class);

精确误差

org.springframework.web.client.HttpClientErrorException$NotFound: 404 Not Found
    at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:85)
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:122)
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:102)
    at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
368yc8dk

368yc8dk1#

“n%c3%b8m”部分是url编码的,restemplate再次对其进行url编码,转义%symbols,生成导致404错误的不同url。
如果将url放在代码中,则应使用java编码(unicode),在本例中,请使用“n\u00f8m”而不是“n%c3%b8m”。
如果您需要在java代码中支持“n%c3%b8m”格式,您可以在使用resttemplate之前使用URLDecover对字符串进行url解码。

相关问题