關於springboot RestTemplate 發起get,post請求亂碼問題
阿新 • • 發佈:2020-07-17
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;