【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”。
有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。