分享知識-快樂自己:spring_Boot 中文返回給瀏覽器亂碼 解析成問號?? fastJson jackJson


心路歷程:

在Controller中return 對象的時候,對象中的屬性值中文部分在瀏覽器中 顯示為問號??

然后結果是這樣的:??

嘗試排查原因:

中文亂碼常有以下三種:

1.request、response里面的這個編碼設置
2.Tomcat 編碼設置
3.數據庫編碼設置

逐一排查:首先我直接return “中文”;結果還是亂碼。數據庫編碼   排除;

然后我寫了個過濾器:

@WebFilter(filterName = "myFilter", urlPatterns = "/*") public class MyFilter implements Filter { @Override public void destroy() { System.out.println("過濾器銷毀"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("執行過濾操作"); response.setCharacterEncoding("UTF-8"); System.out.println(response.getCharacterEncoding()); request.setCharacterEncoding("UTF-8"); System.out.println(request.getCharacterEncoding()); chain.doFilter(request, response); } @Override public void init(FilterConfig config) throws ServletException { System.out.println("過濾器初始化"); } }

失敗,返回依然是亂碼;

接着嘗試:

return new String("中文".getBytes(), "UTF-8");  

失敗,返回依然是亂碼;

 

接着嘗試:

 produces = { "application/json;charset=UTF-8" }

 @RequestMapping(value = "/test", produces = { "application/json;charset=UTF-8" }

成功是成功了,可是這樣感覺很奇怪,總不能每一個RequestMapping 都這樣注解吧。

 

然后我就發現我封裝的jsonVO中使用的是fastjson 會不會是這個問題呢?

springboot 引入的json是 Jackjson,撞牆的想法都有了。

果斷處理:Application extends WebMvcConfigurerAdapter

重寫方法。

@Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { super.configureMessageConverters(converters); FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat); fastConverter.setFastJsonConfig(fastJsonConfig); converters.add(fastConverter); }

可以了。

如果覺得繼承這個WebMvcConfigurerAdapter類影響你繼承其他類,也可以寫個@bean 放在Application  中

retunr    HttpMessageConverter 類型就好;

總結:

1.添加  produces = { "application/json;charset=UTF-8" }

2.重寫configureMessageConverters方法;

3.@bean  HttpMessageConverter ;

 


免責聲明!

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



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