關於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





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM