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


簡介

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

組件簡介

Jackson ObjectMapper

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

官方解釋

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

實戰代碼

創建配置類

首先創建一個配置類,加入定義為: 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對象進行設置,所有序列化的對象都將按改規則進行系列化。
其中枚舉屬性: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM