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(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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值