【Java SpringBoot】RestTemplate使用postForObject发送请求,接收String类型的response时中文乱码

https://blog.csdn.net/qq_43758789/article/details/120576717

 

 使用RestTemplate发送PostForObject的时候会出现乱码。这是因为因为 HttpMessageConverter 构造器中的 StringHttpMessageConverter 默认为"ISO-8859-1"。

然而,我们需要的编码规则可能是“UTF-8”。 如何修改默认的编码呢?

方法一:遍历修改每一个集合的编码

其中一种方法,就是将每个集合的默认,创建对应的工具类方法如下:

 1 import org.springframework.http.converter.HttpMessageConverter;
 2 import org.springframework.http.converter.StringHttpMessageConverter;
 3 import org.springframework.web.client.RestTemplate;
 4 
 5 import java.nio.charset.Charset;
 6 import java.util.List;
 7 
 8 /**
 9  * HTTP请求模板工具栏
10  */
11 public class RestTemplateUtils extends RestTemplate {
12     /**
13      *  HTTP模板编码
14      * @param charset 编码名称(如utf-8)
15      * @return
16      */
17     public static RestTemplate getInstance(String charset) {
18         RestTemplate restTemplate = new RestTemplate();
19         List<HttpMessageConverter<?>> list = restTemplate.getMessageConverters();
20         for (HttpMessageConverter<?> httpMessageConverter : list) {
21             if (httpMessageConverter instanceof StringHttpMessageConverter) {
22                 ((StringHttpMessageConverter) httpMessageConverter).setDefaultCharset(Charset.forName(charset));
23                 break;
24             }
25         }
26         return restTemplate;
27     }
28 }

调用例子。

RestTemplate restTemplate = RestTemplateUtils.getInstance("UTF-8");
// …… 请求头和返回方法
String result = restTemplate.postForObject (url, entity, String.class);

此时,我们发现,编码已经更改为“UTF-8”。

 

方法二: 修改头部集合的模板编码

创建工具类方法如下:

 1 /**
 2      * 获取HTTP模板编码
 3      * @param charset
 4      * @return
 5      */
 6     public  static  RestTemplate setRestemplateCharact(Charset charset){
 7         RestTemplate restTemplate = new RestTemplate();
 8         restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(charset));
 9         return  restTemplate;
10

调用例子:

 RestTemplate restTemplate = RestTemplateUtils.setRestemplateCharact(StandardCharsets.UTF_8);
// …… 请求头和返回方法
String result = restTemplate.postForObject (url, entity, String.class);

 

调用后,我们发现编码已经更改为“UTF-8”。

posted @ 2023-03-02 19:37  陆陆无为而治者  阅读(1960)  评论(0编辑  收藏  举报