1. 程式人生 > >springboot(四).配置FastJson自定義消息轉化器

springboot(四).配置FastJson自定義消息轉化器

pes pen ext super fastjson 常用 conf 快速 true

配置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

註解讓SpringBoot自動加載類內的配置,有一點要註意我們繼承了WebMvcConfigurerAdapter這個類,這個類是SpringBoot內部提供專門處理用戶自行添加的配置,裏面不僅僅包含了修改視圖的過濾還有其他很多的方法,還包括攔截器,過濾器等配置

/**
 * 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自定義消息轉化器