簡介
在前后端分離的微服務時代,后端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