如下代碼,返回中文亂碼
@RequestMapping("/getAddress")
@ResponseBody
public String getAddress(){
return "北京市"; // 頁面顯示???
}
解決辦法:
設置自帶的StringHttpMessageConverter編碼為UTF-8(默認是ISO_8859_1)
@Configuration
public class MyConfiguration extends WebMvcConfigurationSupport {
@Override
protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
// 解決controller返回字符串中文亂碼問題
for (HttpMessageConverter<?> converter : converters) {
if (converter instanceof StringHttpMessageConverter) {
((StringHttpMessageConverter)converter).setDefaultCharset(StandardCharsets.UTF_8);
}
}
}
}
注意:不能用以下方式
// ?。?!不能用這種方式,如果用了將不會添加其他的converter
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters){
converters.add(new StringHttpMessageConverter(StandardCharsets.UTF_8));
}
查看org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#getMessageConverters方法可以看到
protected final List<HttpMessageConverter<?>> getMessageConverters() {
if (this.messageConverters == null) {
this.messageConverters = new ArrayList<>();
configureMessageConverters(this.messageConverters);
// 如重寫configureMessageConverters,list不為空,導致不會添加一些默認的converter
if (this.messageConverters.isEmpty()) {
// 添加其它默認的converter
addDefaultHttpMessageConverters(this.messageConverters);
}
// 正確解法應該重寫這個方法
extendMessageConverters(this.messageConverters);
}
return this.messageConverters;
}
https://shimo.im/docs/gGQHg8xPC3X8cPHV/ 《2020年最新Java架構師系統進階資料免費領取》,可復制鏈接后用石墨文檔 App 或小程序打開