SpringMVC 之返回字符串中文亂碼

@ResponseBody
@RequestMapping(value = "/save")
public String callSomeone() {
    return "保存成功";
}

顯示亂碼
設置了CharacterEncodingFilter爲UTF-8,

方法一:
指定RequestMapping的produces屬性

@ResponseBody
@RequestMapping(value = "/save", produces = "text/html;charset=utf-8")
public String callSomeone() {
    return "保存成功";
}

方法二:
SpringMVC返回字符串的編碼與StringHttpMessageConverter的DefaultCharset屬性有關
修改StringHttpMessageConverter的DefaultCharset屬性
新建一個工具類 AppUtil實現ApplicationContextAware接口,並監聽ContextRefreshedEvent事件

@Component
public class AppUtil implements ApplicationContextAware, ApplicationListener<ContextRefreshedEvent> {
    private ApplicationContext app;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.app = applicationContext;
    }

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        try {
            RequestMappingHandlerAdapter requestMappingHandlerAdapter = app.getBean(RequestMappingHandlerAdapter.class);
            if(requestMappingHandlerAdapter!=null) {
                List<HttpMessageConverter<?>> messageConverters = requestMappingHandlerAdapter.getMessageConverters();
                if(messageConverters!=null) {
                    // 獲取bean容器中的StringHttpMessageConverter,並修改DefaultCharset屬性
                    for(HttpMessageConverter item : messageConverters) {
                        if(item instanceof StringHttpMessageConverter) {
                            ((StringHttpMessageConverter) item).setDefaultCharset(StandardCharsets.UTF_8);
                        }
                    }
                }
            }
        }catch (BeansException e) {

        }
    }
}
text/html;charset=UTF-8 設置返回json數據的編碼爲UTF-8。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章