Springboot:通过Resttemplate防止%的双重编码

时间:2019-04-12 14:56:57

标签: java spring-boot spring-mvc

我们的代码如下使用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

2 个答案:

答案 0 :(得分:1)

您可以通过不对自己的任何部分进行编码来避免这种情况,例如使用#而不是%23

答案 1 :(得分:0)

根据JavaDoc,传递给timestamp的{​​{1}}参数(类型为uri)实际上是URI template 。在没有双重编码的情况下使用rest模板的方式如下:

String

如果您知道已经有正确编码的URL,则可以使用将RestTemplate作为第一个参数的方法:

getAysncRestTemplate().getForEntity(
        "http://api.host.com/version/test?address={address}&language=en-US&format=json", 
        String.class, 
        "%23");