【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<
[email protected]> * @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;
}
本文結束
相關推薦
【Spring Boot-技巧】API返回值去除為NULL的欄位
簡介 在前後端分離的微服務時代,後端API需要良好的規範。本篇主要將一個數據返回時的一個小技巧-- 過濾為空欄位 解決痛點:將有效解決資料傳輸過程中的流量浪費。 元件簡介 Jackson ObjectMapper 通過自定義配置該元件可以選擇性序列化返回的JSON。 官方解釋 Spring MVC(客戶端和伺
【spring boot Mybatis】報錯:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.newhope.interview.dao.UserMapper.add
使用 ase err abstract internal tin mic pre uestc 報錯如下: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): c
【spring boot jpa】hql語句報錯 :antlr.NoViableAltException: unexpected token: roleName
圖片 set 技術 body except exp 所在 antlr class 使用場景:在spring data jpa下使用@Query("hql語句") 然後在項目啟動的時候報錯 hql語句報錯:antlr.NoViableAltException: unexpec
【Spring Boot問題】--authenticationManager無法注入
在更換spring-boot-auto-config的版本從1.5.13升級至2.0.6的過程中出現問題 <dependency> <groupId>org.springframework.boot</groupId> <ar
【Spring Boot問題】--SocialAutoConfigurerAdapter缺失問題
在學習慕課網的《Spring Security技術棧開發企業級認證與授權》的時候,使用spring-boot-autoconfigure的版本是1.5.13 <dependency> <groupId>org.springframework.boot</
【spring Boot異常】No bean named 'entityManagerFactory' available
前言: 最近在學習使用springBoot的資料訪問(JPA),下面的關於它的jar包: <dependency> <groupId>org.springframework.boot</groupId> <arti
【Spring Boot課程】5.web開發
使用spring boot的開發流程: 建立Spring Boot應用,選中我們需要的模組; Spring Boot已經為我們將所有的場景配置好了(spring-boot-autoconfigure包自動配置),我們只需要在配置檔案中指定對應Properties相關的少
【Spring Boot課程】4.日誌
1 日誌框架的選擇 1.1 框架一覽 JUL、JCL、JBoss-logging、log4j、log4j2、slf4j等。 日誌門面(抽象層) 日誌實現 JCL(Jakra Commons
【Spring Boot課程】3.Spring Boot的配置
1 yaml簡介 1.1 基本語法 k:(空格)v: 表示一對鍵值對(空格必須有) 以空格的縮排來控制層級關係;只要是做肚臍的一列資料,都是同一個層級的。 server: port: 8081 path: /hello 屬性和值都是大小寫敏感的。 1.2 值
【Spring Boot課程】2.HelloWorld應用程式
HelloWorld應用程式 給maven的settings.xml配置檔案的profiles標籤新增 <profile> <id>jdk‐1.8</id> <activation&g
【Spring Boot課程】1.基礎知識
前言 該相關文件其實是學習一段名為“尚矽谷Spring Boot的學習視訊”的過程中所做的筆記,教導老師講解的非常細膩,推薦大家去支援一下。 簡介 spring boot是用來簡化Spring應用開發。 約定大於配置 just run就能建立一個獨立的應用
【Spring boot學習】事件啟動順序
ApplicationStartedEvent事件,所以在2.0版本中所有的事件按執行的先後順序如下: ApplicationStartingEvent ApplicationEnvironmentPreparedEvent ApplicationPreparedEve
【spring boot logback】日誌彩色渲染
在logback.xml檔案中 修改位置如下: <property name="CONSOLE_LOG_PATTERN" value="%highlight(%date{yyyy-MM-dd HH:mm:ss.SSS}) %boldYell
【spring boot+mybatis】註解使用方式(無xml配置)設定自動駝峰明明轉換(mapUnderscoreToCamelCase),IDEA中xxDao報錯could not autowi
最近使用spring boot+mybatis,使用IntelliJ IDEA開發,記錄一些問題的解決方法。1、在使用@Mapper註解方式代替XXmapper.xml配置檔案,使用@Select等註解配置sql語句的情況下,如何配置資料庫欄位名到JavaBean實體類屬性命
【Spring Boot入門】AOP基礎及Advice的執行順序
本文主要分為兩個部分,首先介紹AOP的基礎,包括為什麼要使用AOP以及AOP中的基本概念,然後講解AOP中各類Advice的執行順序並給出簡單示例。 一、AOP基礎 1、為什麼要使用AOP AOP(Aspect Oriented Programmi
論dubbo版本升級的重要性【spring boot +dubbo】
dubbo整合到spring boot中,充當消費者 使用的是註解的配置方式。 1、pom.xml中新增 <dependency> <groupId>com.alibaba</groupId> <artif
【SpringMVC】SpringMVC全域性配置Json日期型別、為null欄位時不顯示
<mvc:annotation-driven> <!-- springMVC整合JSON(配置FastJson)配置 --> <mvc:message-converters register-defaults="tr
【Spring Boot】(4)、配置檔案值注入
1、配置檔案使用上節中yaml書寫的配置資訊:server: port: 8081 path: /hello person: name: zhangsan age:
只需一步,在Spring Boot中統一Restful API返回值格式與統一處理異常
統一返回值 在前後端分離大行其道的今天,有一個統一的返回值格式不僅能使我們的介面看起來更漂亮,而且還可以使前端可以統一處理很多東西
【spring Boot】Spring中@Controller和@RestController之間的區別
處理 public 不同 esp 舉例 rest control tro adding spring Boot入手的第一天,看到例子中的@RestController ............. 相同點:都是用來表示Spring某個類的是否可以接收HTTP請求 不同點:@C