本篇内容介绍了“如何解决RestTemplate的getForEntity调用接口乱码的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!R
本篇内容介绍了“如何解决RestTemplate的getForEntity调用接口乱码的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
有时候,当我们在SpringBoot项目中使用restTemplate去调用第三方接口时,会发现返回的body中出现了乱码,百度一搜,基本都说是需要将restTemplate中的消息转换器中的StringHttpMessageConverter的字符编码由iso8859-1改为utf-8 ,但是发现并不管用,那么还有一种可能是第三方接口的数据经过GZIP压缩过
默认情况下,restTemplate使用的是jdk的HTTP调用器,并不支持GZIP解压,所以无法解析。
可以使用Apache 的HttpClient来解决,HttpClient其中内置了对于GZIP的支持
引入pom坐标:
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.3</version></dependency>
修改restTemplate配置:
@Beanpublic RestTemplate restTemplate() { RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory()); //Apache Httpclient restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); return restTemplate; }
此时重新使用restTemplate调用接口,发现数据已经正常了。
的getForEntity(String url, Class responseType, Object… uriVariables)的接口时,返回中文字是乱码的
查看RestTemplate的源码发现
在构造函数中,看到红色圈出来的代码了吗,继续点击进去。
StringHttpMessageConvert这个类中的设置的编码格式为GBK的编码格式,即图中的ISO-8859-1
在自己代码里面获取RestTemplate对象之后,加上一段代码:
为了大家可以复制,我把代码粘贴出来了,如下所示:
RestTemplate restTemplate = new RestTemplate(); List<HttpMessageConverter<?>> httpMessageConverters = restTemplate.getMessageConverters(); httpMessageConverters.stream().forEach(httpMessageConverter -> { if(httpMessageConverter instanceof StringHttpMessageConverter){ StringHttpMessageConverter messageConverter = (StringHttpMessageConverter) httpMessageConverter; messageConverter.setDefaultCharset(Charset.forName("UTF-8")); } }); //发送请求 String JSONStr = restTemplate.getForEntity(url, String.class).getBody();
“如何解决RestTemplate的getForEntity调用接口乱码的问题”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!
--结束END--
本文标题: 如何解决RestTemplate的getForEntity调用接口乱码的问题
本文链接: https://www.lsjlt.com/news/299450.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-02
2024-05-02
2024-05-02
2024-05-02
2024-05-02
2024-05-02
2024-05-02
2024-05-02
2024-05-02
2024-05-02
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0