1. 程式人生 > 其它 >spring boot -- 控制器類中方法返回物件json序列化

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); } }