使用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枚举的取值。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容