08:Springboot整合FastJson返回Json視圖

fastJson是阿里巴巴旗下的一個開源項目之一,顧名思義它專門用來做快速操作Json的序列化與反序列化的組件。

它是目前json解析最快的開源組件沒有之一!在這之前jaskJson是命名為快速操作json的工具,而當阿里巴巴的fastJson誕生後jaskjson就消聲匿跡了,不過目前很多項目還在使用。

08:Springboot整合FastJson返回Json視圖

本章目標

將fastJson加入到SpringBoot項目內,配置json返回視圖使用fastJson解析。

創建SpringBoot項目

看過我前幾章的程序猿們都知道,我們通過IntelliJ IDEA工具創建SpringBoot項目,我們本章也不例外,具體創建步驟這裡就不多做解釋了,最終項目結構如下圖1所示:

08:Springboot整合FastJson返回Json視圖

可以看到我們事先導入了,Web、MySQL、JPA組件,我們把上一章的application.yml配置文件複製到我們的項目對應的目錄下,並且修改pom.xml添加Druid的支持。如下圖2所示:

08:Springboot整合FastJson返回Json視圖

圖2

注意:圖2中的spring-boot-stater-tomcat依賴的scope屬性一定要註釋掉我們才能在IntelliJ IDEA工具使用SpringBootApplication的形式運行項目!

完成上述配置後我們接下來將fastJson的maven依賴也添加進我們的pom.xml配置文件中。

添加依賴

跟我們上一章很相似,我們需要到maven倉庫複製對應的maven依賴xml配置到我們項目的pom.xml中。訪問倉庫地址:mvnrepository.com/artifact/com.alibaba/fastjson/1.2.31,這裡我們使用fastJson最新版本,我們當訪問fastJson的列表界面時可以看到阿里巴巴2017年就發佈了很多個版本,證明阿里巴巴一直在維護並且升級版本,所以我們可以大膽的放心使用。添加效果圖如下圖3所示:

08:Springboot整合FastJson返回Json視圖

圖3

添加完成依賴後我們把上一章的實體類、控制器、JPA複製到我們當前項目下,我們就不重複講解如何創建這些簡單的實體類了。如下圖4所示:

08:Springboot整合FastJson返回Json視圖

圖4

我們接下來創建一個FastJsonConfiguration配置信息類,添加@Configuration註解讓SpringBoot自動加載類內的配置,有一點要注意我們繼承了WebMvcConfigurerAdapter這個類,這個類是SpringBoot內部提供專門處理用戶自行添加的配置,裡面不僅僅包含了修改視圖的過濾還有其他很多的方法,包括我們後面章節要講到的攔截器,過濾器,Cors配置等。

fastJson視圖過濾配置詳細內容如下圖5所示:

08:Springboot整合FastJson返回Json視圖

圖5

上述圖5內fastJson配置實體調用setSerializerFeatures方法可以配置多個過濾方式,下面我們來介紹下常用的SerializerFeatures配置。

FastJson SerializerFeatures

WriteNullListAsEmpty :List字段如果為null,輸出為[],而非null

WriteNullStringAsEmpty : 字符類型字段如果為null,輸出為"",而非null

DisableCircularReferenceDetect :消除對同一對象循環引用的問題,默認為false(如果不配置有可能會進入死循環)

WriteNullBooleanAsFalse:Boolean字段如果為null,輸出為false,而非null

WriteMapNullValue:是否輸出值為null的字段,默認為false。

項目初嘗試運行

經過上述的配置我們基本完成對了SpringBoot整合FastJson的內容,我們接下來嘗試運行下項目,如下圖6所示:

08:Springboot整合FastJson返回Json視圖

圖6

可以看到我們的項目正常運行了,我們訪問之前編寫的查詢列表的請求,看是否給我返回了相應的數據,訪問地址:127.0.0.1:8080/user/list,如下圖7所示:

08:Springboot整合FastJson返回Json視圖

圖7

可以看到我們得到了我們想要的結果,那麼接下來我們該如何去測試fastJson是否已經生效了呢?

我們上述的配置中添加一個

SerializerFeatures(WriteMapNullValue)這個配置的含義就是輸入為NULL值的字段,我們嘗試修改數據庫中的nameNULL看看效果如何,如下圖8所示:

08:Springboot整合FastJson返回Json視圖

圖8

我們可以看到我們將之前的name為test的name字段設置了NULL,我們請求列表接口還是可以得到該字段的但是字段返回是沒有值得。

接下來修改FastJsonConfiguration類內的setSerializerFeatures方法再添加一個配置WriteNullStringAsEmpty,我們再次重啟項目訪問用戶列表地址效果如何?修改配置如下圖9所示:

08:Springboot整合FastJson返回Json視圖

圖9

配置修改完成後,重啟我們的項目程序,訪問用戶列表請求地址,得到的返回結果如下圖10所示:

08:Springboot整合FastJson返回Json視圖

圖10

可以看到上述圖10內的紅色標記處,name的值從NULL變成了"",那麼證明我們的fastJson消息的轉換配置完美生效了。如果你的效果不是上圖10所示,請檢查FastJsonConfiguration配置以及maven依賴問題。

總結

以上便是我們本章的全部講解內容,本章主要講解了SpringBoot項目如何將返回的消息從內部的Json轉換變成fastJson轉換,如何添加fastJson的轉換器過濾配置SerializerFeature。因為@ResultControll註解的Controller本身返回值就是json字符串,我們上述講解通過兩次修改fastJson過濾器配置的方式見證了fastJson的神奇效果。

本公眾號已開設如下二十大專題,歡迎長按以下二維碼,查看相關專題!

【springboot專題】【spring源碼】

【mysql優化專題】【HTTP協議】

【架構技術專題】【多線程專題】

【dubbo專題】【dubbo源碼專題】

【JVM調優專題】【HTTP專題】

【設計模式專題】【高併發專題】

【架構技術專題】【Lucene專題】

【數據結構專題】【redis專題】

【mq中間件專題】【netty專題】

【java面試專題】【zookeeper】


分享到:


相關文章: