乱码产生情况分析
1、当远程调用的参数中某个参数已经经过加密
例: String param = URLEncoder.encode(url,"UTF-8")
2、RestTemplate默认构造方法中会使用默认的uriTemplateHandler
![](https://img.haomeiwen.com/i24553539/6eb98aea969899b0.png)
这个默认的 uriTemplateHandler 会设置加密类型为EncodingMode.URI_COMPONENT(对参数进行加密)
![](https://img.haomeiwen.com/i24553539/cd730eb4e80bb5d2.png)
3、一般情况请求接收方只会对接到的参数进行一次url解码,所以上述情况会进行二次编码,导致解码以后还是乱码的问题。
乱码问题解决
为RestTemplate自定义一个uriTemplateHandler
RestTemplate restTemplate = new RestTemplate();
// 手动设置restTemplate不对uri进行加密
DefaultUriBuilderFactory uriFactory = new DefaultUriBuilderFactory();
uriFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.NONE);
restTemplate.setUriTemplateHandler(uriFactory);
如果有其他需求可以更改EncodingMode枚举的取值。
网友评论