最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot配置返回?cái)?shù)據(jù)不存在null的問(wèn)題小結(jié)

 更新時(shí)間:2025年02月11日 10:57:34   作者:用草書(shū)譜寫(xiě)蘭亭序  
文章介紹了在Spring Boot項(xiàng)目中使用Jackson序列化器處理JSON數(shù)據(jù)時(shí)遇到的問(wèn)題,特別是如何配置Jackson以返回不包含null值的JSON響應(yīng),并探討了Jackson的三種主要JSON處理方法,感興趣的朋友一起看看吧

一、引言

最近在做項(xiàng)目中遇到一個(gè)神奇的問(wèn)題,在測(cè)試返回銀行三級(jí)數(shù)據(jù)的時(shí)候有的項(xiàng)目中返回的數(shù)據(jù)中把null值的數(shù)據(jù)返回了,而有的時(shí)候就不存在null值數(shù)據(jù),如下所示:

存在null值情況

不含null值情況

但是我們可以看一下返回的VO的數(shù)據(jù)結(jié)果如下:

import lombok.Data;
import java.util.List;
/*
 * @description 銀行
 * @author 羅添煦
 * @create 2024-08-30 下午12:38
 */
@Data
public class BankEntity {
    private String bankName;
    private String bankCode;
    private List<BankEntity> children;
}

二、jackson

        因?yàn)樯厦娴膯?wèn)題出現(xiàn)帶著好奇心的我,就去搜索了大量的資料,發(fā)現(xiàn)在springboot中默認(rèn)支持的序列化器是jackson,可能你沒(méi)有聽(tīng)說(shuō)過(guò)jackson這個(gè)序列化器,但是你應(yīng)該在項(xiàng)目中使用過(guò)alibaba的序列化工具fastjson。

1、默認(rèn)情況下,ObjectMapper 在序列化對(duì)象時(shí),將實(shí)體所有的字段一 一序列化,無(wú)論這些字段是否有值,是否為 null。

2、如果實(shí)體的某個(gè)字段沒(méi)有提供 getter 方法,則該字段不會(huì)被序列化。

3、Spring Boot Web 組件默認(rèn)使用 Jackson 進(jìn)行對(duì)象的序列化與反序列化,即頁(yè)面?zhèn)魅氲膮?shù),會(huì)自動(dòng)反序列化為后臺(tái)對(duì)象,后臺(tái)傳給前端的對(duì)象,也會(huì)序列化后輸出。所以需要注意返回給頁(yè)面的對(duì)象默認(rèn)不能使用 Jackson 以外的 Json 庫(kù)序列化,比如返回一個(gè) Gson 的 JsonObject 給前端,則會(huì)報(bào)錯(cuò),因?yàn)轱@然 Jackson 序列化時(shí)會(huì)失敗。

4、Jackson 提供三種不同的方法來(lái)操作 JSON:

1)流式API - 使用 Stream(流) 的方式對(duì) Json 的每一個(gè)組成部分進(jìn)行最細(xì)粒度的控制,JsonParser 讀取數(shù)據(jù),JsonGenerator 寫(xiě)入數(shù)據(jù)。

 2)樹(shù)模型 - 將 JSON 文件在內(nèi)存里以樹(shù)的形式表示,通過(guò) JsonNode 處理單個(gè)Json節(jié)點(diǎn),類(lèi)似于 XML 的 DOM 解析器。(常用)

3)databind 模塊 - ObjectMapper 讀/寫(xiě) JSON 是 POJO 序列化與反序列化 Json 最方便的方式。(常用)

但是這個(gè)地方我們就不過(guò)多的去介紹使用Jackson我們還是來(lái)看一下是如何解決響應(yīng)數(shù)據(jù)中不含null值這個(gè)問(wèn)題的。 

三、配置jackson

處理方法1、返回json中的null字段-不顯示 

配置文件添加 spring.jackson.default-property-inclusion=non_null 配置

處理方法2、返回json中的null字段-轉(zhuǎn)為空字符串

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
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;
import java.io.IOException;
/**
 * 處理 jackson 返回的null值
 * 返回json中的null值轉(zhuǎn)為空字符串
 */
@Configuration
public class JacksonConfig {
    @Bean
    @Primary
    @ConditionalOnMissingBean(ObjectMapper.class)
    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
        ObjectMapper objectMapper = builder.createXmlMapper(false).build();
        objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
            @Override
            public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
                jsonGenerator.writeString("");
            }
        });
        return objectMapper;
    }
}

但是這種方式只是把返回null的數(shù)據(jù)返回成為了空字符串,和我們需要的看不到參數(shù)還是有差距的。

 jackson其他配置,我們可以配置Jackson返回時(shí)間的類(lèi)型。

我們可以看一下springboot默認(rèn)幫我們配置的時(shí)間類(lèi)型的返回?cái)?shù)據(jù)是什么格式。

在不指定任何特殊配置的情況下,返回的 date 類(lèi)型的字段會(huì)自動(dòng)轉(zhuǎn)成 UTC 格式字符串,形如 "2024-09-02T01:51:24.091+00:00"

但是我們想要變成yyyy-MM-dd HH:mm:ss這種格式的話我們就可以在字段上添加注解

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;

 經(jīng)過(guò)配置以后返回?cái)?shù)據(jù)如下所示:

到此這篇關(guān)于SpringBoot配置返回?cái)?shù)據(jù)不存在null的問(wèn)題小結(jié)的文章就介紹到這了,更多相關(guān)SpringBoot返回null內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot?整合?RocketMQ?收發(fā)消息的配置過(guò)程

    Springboot?整合?RocketMQ?收發(fā)消息的配置過(guò)程

    這篇文章主要介紹了Springboot?整合?RocketMQ?收發(fā)消息,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • 在Java中如何比較兩個(gè)對(duì)象淺析

    在Java中如何比較兩個(gè)對(duì)象淺析

    在工作中我們經(jīng)常會(huì)遇到這樣的需求——比較兩個(gè)對(duì)象是否相等,如果不相等的話,取出不相等的字段,這篇文章主要給大家介紹了關(guān)于在Java中如何比較兩個(gè)對(duì)象的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • Java中動(dòng)態(tài)設(shè)置JVM參數(shù)的方法總結(jié)

    Java中動(dòng)態(tài)設(shè)置JVM參數(shù)的方法總結(jié)

    通過(guò)動(dòng)態(tài)設(shè)置JVM參數(shù),開(kāi)發(fā)者可以更有效地管理資源使用和優(yōu)化性能,本文將詳細(xì)闡述如何在Java中動(dòng)態(tài)設(shè)置JVM參數(shù),感興趣的小伙伴可以了解下
    2024-12-12
  • Spring Boot集成Kafka最佳實(shí)踐與詳細(xì)代碼

    Spring Boot集成Kafka最佳實(shí)踐與詳細(xì)代碼

    Spring Boot作為Java領(lǐng)域的流行框架,提供了與Kafka的無(wú)縫集成,本文將詳細(xì)介紹如何在Spring Boot項(xiàng)目中優(yōu)雅地集成Kafka,并通過(guò)最佳實(shí)踐和代碼示例詳細(xì)講解,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • 源碼解析JDK 1.8 中的 Map.merge()

    源碼解析JDK 1.8 中的 Map.merge()

    這篇文章主要介紹了JDK 1.8 之 Map.merge()的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java通過(guò)百度API實(shí)現(xiàn)圖片車(chē)牌號(hào)識(shí)別

    Java通過(guò)百度API實(shí)現(xiàn)圖片車(chē)牌號(hào)識(shí)別

    這段時(shí)間做項(xiàng)目需要用java程序進(jìn)行車(chē)牌識(shí)別,因此嘗試做了下這個(gè)程序,本代碼功能是通過(guò)調(diào)用百度API實(shí)現(xiàn)的,感興趣的可以了解一下
    2021-06-06
  • 深度思考JDK8中日期類(lèi)型該如何使用詳解

    深度思考JDK8中日期類(lèi)型該如何使用詳解

    這篇文章主要介紹了JDK8中日期類(lèi)型該如何使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • java中BCryptPasswordEncoder密碼的加密與驗(yàn)證方式

    java中BCryptPasswordEncoder密碼的加密與驗(yàn)證方式

    這篇文章主要介紹了java中BCryptPasswordEncoder密碼的加密與驗(yàn)證方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • java中String與StringBuilder的區(qū)別

    java中String與StringBuilder的區(qū)別

    本篇文章介紹了,java中String與StringBuilder的區(qū)別。需要的朋友參考下
    2013-04-04
  • springboot+vue實(shí)現(xiàn)登錄功能的最新方法整理

    springboot+vue實(shí)現(xiàn)登錄功能的最新方法整理

    最近做項(xiàng)目時(shí)使用到了springboot+vue實(shí)現(xiàn)登錄功能的技術(shù),所以下面這篇文章主要給大家介紹了關(guān)于springboot+vue實(shí)現(xiàn)登錄功能的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06

最新評(píng)論

韩城市| 安岳县| 桂阳县| 新津县| 青海省| 宣汉县| 佛冈县| 周口市| 南和县| 壤塘县| 滦南县| 威海市| 遂昌县| 永顺县| 苍梧县| 枣阳市| 钦州市| 建瓯市| 伊川县| 陆丰市| 太保市| 海口市| 铜鼓县| 龙山县| 思南县| 海宁市| 深水埗区| 满洲里市| 松江区| 尉氏县| 汉寿县| 余姚市| 育儿| 台山市| 大姚县| 肇州县| 邹平县| 黄山市| 炉霍县| 巍山| 邳州市|