【Spring Boot-技巧】API返回值去除為NULL的字段

簡介

在前后端分離的微服務時代昭灵,后端API需要良好的規(guī)范鲁豪。本篇主要將一個數(shù)據(jù)返回時的一個小技巧-- 過濾為空字段
解決痛點:將有效解決數(shù)據(jù)傳輸過程中的流量浪費。

組件簡介

Jackson ObjectMapper

通過自定義配置該組件可以選擇性序列化返回的JSON吕漂。

官方解釋

Spring MVC(客戶端和服務器端)用于HttpMessageConverters在HTTP交換中協(xié)商內容轉換廷痘。如果Jackson在類路徑上蚓哩,您已經獲得了提供的默認轉換器 Jackson2ObjectMapperBuilder 构灸,其中一個實例是為您自動配置的。
Spring Boot還具有一些功能岸梨,可以更輕松地自定義此行為喜颁。

實戰(zhàn)代碼

創(chuàng)建配置類

首先創(chuàng)建一個配置類,加入定義為: JacksonConfig

代碼清單

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

/**
 * @author Han Yahong<hyhvpn@126.com>
 * @program 51-baojiadan-service
 * @description 返回json空值去掉null和""
 * @create 2018-07-26 11:04
 */
@Configuration
public class JacksonConfig {
    @Bean
    @Primary
    @ConditionalOnMissingBean(ObjectMapper.class)
    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
        ObjectMapper objectMapper = builder.createXmlMapper(false).build();
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        return objectMapper;
    }
}

代碼解釋:以上就是全部代碼曹阔,通過注解@Configuration 注入后可自動配置半开。

關鍵點objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
通過該方法對mapper對象進行設置,所有序列化的對象都將按改規(guī)則進行系列化赃份。
其中枚舉屬性:JsonInclude.Include.NON_NULL有以下選擇:

屬性 使用場景
Include.Include.ALWAYS 默認
Include.NON_DEFAULT 屬性為默認值不序列化
Include.NON_EMPTY 屬性為 空("") 或者為 NULL 都不序列化
Include.NON_NULL 屬性為NULL 不序列化

替換非空

可通過自定義替換原有制定值寂拆。代碼如下:

public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
        ObjectMapper objectMapper = builder.createXmlMapper(false).build();
        // 字段保留,將null值轉為""
        objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
            @Override
            public void serialize(Object o, JsonGenerator jsonGenerator,
                                  SerializerProvider serializerProvider)
                    throws IOException, JsonProcessingException {
                jsonGenerator.writeString("");
            }
        });
        return objectMapper;
    }

本文結束

BLOG官網地址:https://www.hanyahong.com

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末芥炭,一起剝皮案震驚了整個濱河市漓库,隨后出現(xiàn)的幾起案子恃慧,更是在濱河造成了極大的恐慌园蝠,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痢士,死亡現(xiàn)場離奇詭異彪薛,居然都是意外死亡,警方通過查閱死者的電腦和手機怠蹂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門善延,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人城侧,你說我怎么就攤上這事易遣。” “怎么了嫌佑?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵豆茫,是天一觀的道長。 經常有香客問我屋摇,道長揩魂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任炮温,我火速辦了婚禮火脉,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己倦挂,他們只是感情好畸颅,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著方援,像睡著了一般重斑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肯骇,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天窥浪,我揣著相機與錄音,去河邊找鬼笛丙。 笑死漾脂,一個胖子當著我的面吹牛,可吹牛的內容都是我干的胚鸯。 我是一名探鬼主播骨稿,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼姜钳!你這毒婦竟也來了坦冠?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤哥桥,失蹤者是張志新(化名)和其女友劉穎辙浑,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拟糕,經...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡判呕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了送滞。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侠草。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖犁嗅,靈堂內的尸體忽然破棺而出边涕,到底是詐尸還是另有隱情,我是刑警寧澤褂微,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布功蜓,位于F島的核電站,受9級特大地震影響蕊梧,放射性物質發(fā)生泄漏霞赫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一肥矢、第九天 我趴在偏房一處隱蔽的房頂上張望端衰。 院中可真熱鬧叠洗,春花似錦、人聲如沸旅东。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抵代。三九已至腾节,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間荤牍,已是汗流浹背案腺。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留康吵,地道東北人劈榨。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像晦嵌,于是被迫代替她去往敵國和親同辣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理惭载,服務發(fā)現(xiàn)旱函,斷路器,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,803評論 6 342
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架描滔,建立于...
    Hsinwong閱讀 22,394評論 1 92
  • 關于夢想和生活棒妨,每個人都會有不同的選擇。在這個嘈雜的大城市的貧困住宅區(qū)伴挚,有不同的巷子靶衍,不同的樓棟灾炭,每個人都孜孜不倦...
    曾野閱讀 256評論 1 2
  • 題目鏈接 : http://game.sycsec.com:2008/Steam/1.php?type=DESC ...
    王一航閱讀 893評論 7 2