美文网首页
使用restTemplate传递参数乱码问题解决

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

作者: 从零开始的程序猿生活 | 来源:发表于2023-03-09 15:03 被阅读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枚举的取值。

相关文章

网友评论

      本文标题:使用restTemplate传递参数乱码问题解决

      本文链接:https://www.haomeiwen.com/subject/cbgaldtx.html