Springboot@ResponseBodyが中国語の文字化けしを返す問題を解決する
7344 ワード
次のコードで、中国語の文字化けしを返します.
解決策:
独自のStringHttpMessageConverterをUTF-8にエンコードするように設定します(デフォルトはISO_8859_1)
注意:次の方法では使用できません.
@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;
}