java accept charset_关于springboot RestTemplate 发起get,post请求 accept-charset 返回很长的英文的问题...
1原代码RestTemplate 这个我是自己直接new出来的,底层代码显示RestTemplate 的编码是 iso-8859-1,并非utf-8。我在跟客户对接的时候,一度以为是因为header没设置header.setContentType(MediaType.APPLICATION_JSON_UTF8); 的这个原因,后面排查发现加了这个也不是。而后又继续排查加这个:header.set.
1原代码
RestTemplate 这个我是自己直接new出来的,底层代码显示 RestTemplate 的编码是 iso-8859-1,并非utf-8。
我在跟客户对接的时候,一度以为是因为header没设置
header.setContentType(MediaType.APPLICATION_JSON_UTF8); 的这个原因,后面排查发现加了这个也不是。
而后又继续排查加这个:
header.set(HttpHeaders.ACCEPT_CHARSET, StandardCharsets.UTF_8.toString()); 还是不行。
最后查到可能是因为默认编码导致的。
故:创建一个修改默认编码的 RestTemplate
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.StandardCharsets;
/**
* 创建一个RestTemplate ,修改默认编码为 utf-8,框架默认为 iso-8859-1
*/
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate initRestTemplate(){
RestTemplate restTemplate= new RestTemplate();
restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8));
return restTemplate;
}
}
在需要使用这个 RestTemplate 的时候,不要再去new了,而是
@Resource
private RestTemplate restTemplate;
或者----》
@Autowired
private RestTemplate restTemplate;
-------》如上述方式还是不行。可以尝试下面这方式:
RestTemplate restTemplate=new RestTemplate();
for (HttpMessageConverter converter : restTemplate.getMessageConverters()) {
if (converter instanceof StringHttpMessageConverter) {
((StringHttpMessageConverter) converter).setWriteAcceptCharset(false);
}
}
解释下:当HttpEntity 传的body为Sting 设置
((StringHttpMessageConverter) converter).setWriteAcceptCharset(false);
。大致就是当参数为String时候,设置setWriteAcceptCharset为false
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)