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

2023-03-09  本文已影响0人  从零开始的程序猿生活

乱码产生情况分析

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

上一篇 下一篇

猜你喜欢

热点阅读