使用restTemplate传递参数乱码问题解决

乱码产生情况分析

1、当远程调用的参数中某个参数已经经过加密

例: String param = URLEncoder.encode(url,"UTF-8")

2、RestTemplate默认构造方法中会使用默认的uriTemplateHandler


image.png

这个默认的 uriTemplateHandler 会设置加密类型为EncodingMode.URI_COMPONENT(对参数进行加密)


image.png

3、一般情况请求接收方只会对接到的参数进行一次url解码,所以上述情况会进行二次编码,导致解码以后还是乱码的问题。

乱码问题解决

为RestTemplate自定义一个uriTemplateHandler

                RestTemplate restTemplate = new RestTemplate();
                // 手动设置restTemplate不对uri进行加密
                DefaultUriBuilderFactory uriFactory = new DefaultUriBuilderFactory();
                uriFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.NONE); 
                restTemplate.setUriTemplateHandler(uriFactory);

如果有其他需求可以更改EncodingMode枚举的取值。

你可能感兴趣的:(使用restTemplate传递参数乱码问题解决)