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

簡(jiǎn)介

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

組件簡(jiǎn)介

Jackson ObjectMapper

通過(guò)自定義配置該組件可以選擇性序列化返回的JSON。

官方解釋

Spring MVC(客戶端和服務(wù)器端)用于HttpMessageConverters在HTTP交換中協(xié)商內(nèi)容轉(zhuǎn)換。如果Jackson在類路徑上,您已經(jīng)獲得了提供的默認(rèn)轉(zhuǎn)換器 Jackson2ObjectMapperBuilder ,其中一個(gè)實(shí)例是為您自動(dòng)配置的。
Spring Boot還具有一些功能,可以更輕松地自定義此行為。

實(shí)戰(zhàn)代碼

創(chuàng)建配置類

首先創(chuàng)建一個(gè)配置類,加入定義為: 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;
    }
}

代碼解釋:以上就是全部代碼,通過(guò)注解@Configuration 注入后可自動(dòng)配置。

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

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

替換非空

可通過(guò)自定義替換原有制定值。代碼如下:

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

本文結(jié)束

BLOG官網(wǎng)地址:https://www.hanyahong.com

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,253評(píng)論 6 342
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,931評(píng)論 1 92
  • 關(guān)于夢(mèng)想和生活,每個(gè)人都會(huì)有不同的選擇。在這個(gè)嘈雜的大城市的貧困住宅區(qū),有不同的巷子,不同的樓棟,每個(gè)人都孜孜不倦...
    曾野閱讀 298評(píng)論 1 2
  • 題目鏈接 : http://game.sycsec.com:2008/Steam/1.php?type=DESC ...
    王一航閱讀 982評(píng)論 7 2

友情鏈接更多精彩內(nèi)容