springboot(四).配置FastJson自定義消息轉化器
配置FastJson自定義消息轉化器
一.fastJson簡介
fastJson是阿裏巴巴旗下的一個開源項目之一,顧名思義它專門用來做快速操作Json的序列化與反序列化的組件。它是目前json解析最快的開源組件沒有之一!在這之前jaskJson是命名為快速操作json的工具,而當阿裏巴巴的fastJson誕生後jaskjson就消聲匿跡了,不過目前很多項目還在使用。
今天,我們使用fastJson來配置消息轉換器,過濾並修改返回的消息
二.依賴導入
<!--fastjson依賴添加--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.31</version> </dependency>
三.配置類編寫
新建FastJsonConfiguration配置信息類,添加@Configuration
/** * WebMvcConfigurerAdapter類是SpringBoot內部提供專門處理用戶自行添加的配置, * 裏面不僅僅包含了修改視圖的過濾還有其他很多的方法,還包括攔截器,過濾器,Cors配置等。 * Created by hengyang4 on 2018/7/9. */ @Configuration public class FastJsonConfiguration extends WebMvcConfigurerAdapter{ /** * 修改自定義消息轉化器 * @param converters 消息轉換器列表 */ @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters){ //調用父類的配置 super.configureMessageConverters(converters); //創建fastJson消息轉換器 FastJsonHttpMessageConverter fastJsonConverter = new FastJsonHttpMessageConverter(); //創建配置類 FastJsonConfig fastJsonConfig = new FastJsonConfig(); //過濾並修改配置返回內容 fastJsonConfig.setSerializerFeatures( //List字段如果為null,輸出為[],而非null //SerializerFeature.WriteNullListAsEmpty, //字符類型字段如果為null,輸出為"",而非null SerializerFeature.WriteNullStringAsEmpty, //Boolean字段如果為null,輸出為falseJ,而非null //SerializerFeature.WriteNullBooleanAsFalse, //消除對同一對象循環引用的問題,默認為false(如果不配置有可能會進入死循環) SerializerFeature.DisableCircularReferenceDetect, //是否輸出值為null的字段,默認為false。 SerializerFeature.WriteMapNullValue ); //處理中文亂碼問題 List<MediaType> fastMediaTypes = new ArrayList<MediaType>(); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); fastJsonConverter.setSupportedMediaTypes(fastMediaTypes); fastJsonConverter.setFastJsonConfig(fastJsonConfig); //將fastjson添加到視圖消息轉換器列表內 converters.add(fastJsonConverter); } }
下面我們來介紹下常用的SerializerFeatures配置。
FastJson SerializerFeatures
WriteNullListAsEmpty :List字段如果為null,輸出為[],而非null
WriteNullStringAsEmpty : 字符類型字段如果為null,輸出為"",而非null
DisableCircularReferenceDetect :消除對同一對象循環引用的問題,默認為false(如果不配置有可能會進入死循環)
WriteNullBooleanAsFalse:Boolean字段如果為null,輸出為false,而非null
WriteMapNullValue:是否輸出值為null的字段,默認為false。
四.結果驗證
我們這裏使用了WriteNullStringAsEmpty,當返回信息裏有null值時會自動轉為"",我們來一起驗證一下
表中數據第一條信息的name為null,我們來查詢一下第一條用戶信息
返回的name轉為了空字符串"",這樣,我們的fastJson消息轉化器就配置成功了!
springboot(四).配置FastJson自定義消息轉化器