1. 程式人生 > >【Spring Boot-技巧】API返回值去除為NULL的欄位

【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 jpahql語句報錯 :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

SpringMVCSpringMVC全域性配置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 BootSpring中@Controller和@RestController之間的區別

處理 public 不同 esp 舉例 rest control tro adding spring Boot入手的第一天,看到例子中的@RestController ............. 相同點:都是用來表示Spring某個類的是否可以接收HTTP請求 不同點:@C