首頁 > 軟體

Spring boot詳解fastjson過濾欄位為null值如何解決

2022-07-15 10:02:05

前言

最近因專案需要,從零開始重新搭建了一套框架給同事們用。在前後端對接的時候,發現後端提供的欄位缺少了很多,即實體類為null值的欄位,全部被過濾了。經排查,是fastjson的鍋。

因為fastjson預設就把value為null的值給過濾掉,不輸出空值。

俗話說,當你遇見問題時,找到問題的原因,你的問題就已經解決了一半。

環境

jdk1.8

maven:3.6.3

spring boot:2.2.13-RELEASE

fastjson:1.28.0

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.80</version>
</dependency>

解決方法

解決方法也很簡單,只需要加上一個組態檔即可,對於fastjson進行註解設定。

 

 其中,最主要的就是設定通過FastJsonConfig的setSerializerFeatures方法來設定fastJson的功能

com.alibaba.fastjson.support.config.FastJsonConfig#setSerializerFeatures

/**
 * 返回值過濾器
 * 
 * @Author: 攻城獅白玉 https://blog.csdn.net/zhh763984017
 * @Date: 2022/7/09 18:05
 */
@Configuration
public class FastjsonConverterConfig {
    @Bean
    public HttpMessageConverters customConverters() {
        // 定義一個轉換訊息的物件
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        // 新增fastjson的設定資訊 比如 :是否要格式化返回的json資料
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        // 這裡就是核心程式碼了,WriteMapNullValue把空的值的key也返回
        fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteMapNullValue);
        List<MediaType> fastMediaTypes = new ArrayList<MediaType>();
        // 處理中文亂碼問題
        fastJsonConfig.setCharset(Charset.forName("UTF-8"));
        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        fastConverter.setSupportedMediaTypes(fastMediaTypes);
        // 在轉換器中新增設定資訊
        fastConverter.setFastJsonConfig(fastJsonConfig);
        StringHttpMessageConverter stringConverter = new StringHttpMessageConverter();
        stringConverter.setDefaultCharset(Charset.forName("UTF-8"));
        stringConverter.setSupportedMediaTypes(fastMediaTypes);
        // 將轉換器新增到converters中
        return new HttpMessageConverters(stringConverter,fastConverter);
    }
}

後記

從零開始搭一個新的框架出來真的是不容易。

儘管原來的框架依賴是多了點,重了點,但是舊有設定好的東西也多,是挺香的哇。

不過重新搭建新的框架,也讓我重新審視了許多知識,對於框架的搭建使用上,該用奧卡姆剃刀的時候就得用奧卡姆剃刀,保持框架儘可能的乾淨。

到此這篇關於Spring boot詳解fastjson過濾欄位為null值如何解決的文章就介紹到這了,更多相關Spring boot fastjson過濾欄位內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com