我们的代码使用Asyncresttemplate,如下所示
String uri = http://api.host.com/version/test?address=%23&language=en-US&format=json
getAysncRestTemplate().getForEntity(uri, String.class);但是%23在Rest模板中被双重编码为%2523,url变成了http://api.host.com/version/test?address=%2523&language=en-US&format=json,但是我需要传递编码的字符串,如果我传递解码的数据'#‘,它就不会编码。
如何在不对URL进行双重编码的情况下发送此请求?
已尝试使用UriComponentsBuilder Avoid Double Encoding of URL query param with Spring's RestTemplate
发布于 2019-09-25 22:40:56
根据JavaDoc,传递给RestTemplate的uri参数(类型为String)实际上是一个URI模板。在不使用双重编码的情况下使用rest模板的方法如下:
getAysncRestTemplate().getForEntity(
"http://api.host.com/version/test?address={address}&language=en-US&format=json",
String.class,
"#"); // (%23 decoded)如果你知道你已经有了一个正确编码的网址,你可以使用URI作为第一个参数的方法:
restTemplate.getForEntity(
new URI("http://api.host.com/version/test?address=%23&language=en-US&format=json"),
String.class);发布于 2019-04-12 23:03:43
你可以通过不自己编码它的任何部分来避免这种情况,例如使用#而不是%23
https://stackoverflow.com/questions/55654417
复制相似问题