首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Springboot :防止% by Resttemplate重复编码

Springboot :防止% by Resttemplate重复编码
EN

Stack Overflow用户
提问于 2019-04-12 22:56:57
回答 2查看 3.7K关注 0票数 3

我们的代码使用Asyncresttemplate,如下所示

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2019-09-25 22:40:56

根据JavaDoc,传递给RestTemplateuri参数(类型为String)实际上是一个URI模板。在不使用双重编码的情况下使用rest模板的方法如下:

代码语言:javascript
复制
getAysncRestTemplate().getForEntity(
        "http://api.host.com/version/test?address={address}&language=en-US&format=json", 
        String.class, 
        "#"); // (%23 decoded)

如果你知道你已经有了一个正确编码的网址,你可以使用URI作为第一个参数的方法:

代码语言:javascript
复制
restTemplate.getForEntity(
        new URI("http://api.host.com/version/test?address=%23&language=en-US&format=json"),
        String.class);
票数 7
EN

Stack Overflow用户

发布于 2019-04-12 23:03:43

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55654417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档