spring boot -- 控制器類中方法返回對象json序列化


前言

  fastjson是一個Java語言編寫的高性能功能完善的JSON庫。它采用一種“假定有序快速匹配”的算法,把JSON Parse的性能提升到極致,是目前Java語言中最快的JSON庫。Fastjson接口簡單易用,已經被廣泛使用在緩存序列化、協議交互、Web輸出、Android客戶端

   Jackson:是spring boot 默認的解析和序列化json數據的庫,作用和fastjson一樣,只不過阿里的fastjson的性能要比jackson好些,大多數人的選擇都是fastjson

引入依賴

   <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.56</version>
    </dependency>

 

JSON class

  引入依賴后,會提供一個JSON類,它有很多比較高效和實用的方法

 

 

定義控制器返回對象json序列化處理器

  全局替換spring boot 默認的控制器返回對象序列化處理器。控制器中的方法返回的對象,spring boot都會對它進行一個序列化處理,后才會返回給前端,默認的處理器是JackSon

@Configuration
public class CustomMVCConf extends WebMvcConfigurationSupport {

@Override protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) { /* 先把JackSon的消息轉換器刪除. 備注: (1)源碼分析可知,返回json的過程為: Controller調用結束后返回一個數據對象,for循環遍歷 Converter,找到支持application/json的HttpMessageConverter,然后將返回的數據序列化成json。 具體參考org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor的writeWithMessageConverters方法 (2)由於是list結構,我們添加的fastjson在最后。因此必須要將jackson的轉換器刪除,不然會先匹配上jackson,導致沒使用fastjson */ for (int i = converters.size() - 1; i >= 0; i--) { if (converters.get(i) instanceof MappingJackson2HttpMessageConverter) { converters.remove(i); } } FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); //自定義fastjson配置 FastJsonConfig config = new FastJsonConfig(); config.setSerializerFeatures( SerializerFeature.WriteMapNullValue, // 是否輸出值為null的字段,默認為false,我們將它打開 SerializerFeature.WriteNullListAsEmpty, // 將Collection類型字段的字段空值輸出為[] SerializerFeature.WriteNullStringAsEmpty, // 將字符串類型字段的空值輸出為空字符串 SerializerFeature.WriteNullNumberAsZero, // 將數值類型字段的空值輸出為0 SerializerFeature.WriteDateUseDateFormat, SerializerFeature.DisableCircularReferenceDetect // 禁用循環引用 ); fastJsonHttpMessageConverter.setFastJsonConfig(config); // 添加支持的MediaTypes;不添加時默認為*/*,也就是默認支持全部 // 但是MappingJackson2HttpMessageConverter里面支持的MediaTypes為application/json // 參考它的做法, fastjson也只添加application/json的MediaType List<MediaType> fastMediaTypes = new ArrayList<>(); fastMediaTypes.add(MediaType.APPLICATION_JSON); fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes); converters.add(fastJsonHttpMessageConverter); super.configureMessageConverters(converters); } }

 


免責聲明!

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



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