我们的代码使用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
最佳答案
传递给 RestTemplate
的 uri
参数(类型为 String
)实际上是一个 URI 模板,如下所示JavaDoc。使用剩余模板而不进行双重编码的方法如下:
getAysncRestTemplate().getForEntity(
"http://api.host.com/version/test?address={address}&language=en-US&format=json",
String.class,
"#"); // (%23 decoded)
如果您知道自己已经拥有正确编码的 URL,则可以使用将 URI
作为第一个参数的方法:
restTemplate.getForEntity(
new URI("http://api.host.com/version/test?address=%23&language=en-US&format=json"),
String.class);
关于java - Spring 启动: Prevent double encoding of % by Resttemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55654417/