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