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

java實(shí)體類轉(zhuǎn)json時(shí)null值不要轉(zhuǎn)為"null"問題

 更新時(shí)間:2023年11月14日 09:25:44   作者:八位數(shù)花園  
這篇文章主要介紹了java實(shí)體類轉(zhuǎn)json時(shí)null值不要轉(zhuǎn)為“null”問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

java實(shí)體類轉(zhuǎn)json時(shí)null值不要轉(zhuǎn)為“null”

可以使用 Gson 庫中的 GsonBuilder 來解決這個(gè)問題。

你可以使用 GsonBuilder 的 setSerializationNulls() 方法來設(shè)置 null 值是否應(yīng)該被序列化。

這是一個(gè)示例代碼:

Gson gson =new GsonBuilder().setSerializationNulls(false).create();
String json = gson.toJson(yourObject);

這樣就可以在轉(zhuǎn)換實(shí)體類為 JSON 時(shí)避免 null 值被轉(zhuǎn)化為 "null"。

實(shí)體類轉(zhuǎn)JSON字段為null時(shí)不顯示key?

一、什么是fastjson?

fastjson是阿里巴巴的開源JSON解析庫,它可以解析JSON格式的字符串,支持將Java Bean序列化為JSON字符串,也可以從JSON字符串反序列化到JavaBean。

二、如何使用

添加如下maven依賴即可:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.60</version>
</dependency>

三、fastjson默認(rèn)序列化

fastjson入口類是com.alibaba.fastjson.JSON,一個(gè)最簡(jiǎn)單默認(rèn)的序列化代碼如下:

User user = new User();
String str= JSON.toJSONString(user);

四、如何自定義序列化

fastjson支持多種方式自定義序列化。

1.使用序列化屬性SerializerFeature

SerializerFeature常用屬性如下:

名稱含義
WriteNonStringKeyAsString如果key不為String,則轉(zhuǎn)換為String
WriteNonStringValueAsString如果value不為String,則轉(zhuǎn)換為String
WriteMapNullValue輸出為空的字段
WriteNullStringAsEmptyString為null時(shí)輸出""
WriteNullNumberAsZeronumber為null時(shí)輸出0
WriteDateUseDateFormat修改日期格式,yyyy-MM-dd

常用的屬性介紹完了,咱們先來看下效果,新建一個(gè)User類,代碼如下:

@Data
public class User implements Serializable {
 
    private static final long serialVersionUID = 1L;
 
    private Integer id;
 
    private Integer age;
 
    private String name;
 
    private String sex;
 
    private Date createDate;
 
    private Map<Integer, Integer> dataMap;
 
}

運(yùn)行類代碼如下:

public static void main(String[] args) {
        User user = new User();
        user.setId(1000);
        user.setName("Java碎碎念");
        user.setCreateDate(new Date());
 
        Map<Integer, Integer> datamap = new HashMap<>();
        datamap.put(1, 100);
        datamap.put(2, 200);
        user.setDataMap(datamap);
 
        System.out.println("默認(rèn)序列化結(jié)果:\n" + JSON.toJSONString(user));
        System.out.println("指定WriteNonStringKeyAsString序列化結(jié)果:\n" + JSON.toJSONString(user, SerializerFeature.WriteNonStringKeyAsString));
        System.out.println("指定WriteNonStringValueAsString序列化結(jié)果:\n" + JSON.toJSONString(user, SerializerFeature.WriteNonStringValueAsString));
        System.out.println("指定WriteMapNullValue序列化結(jié)果:\n" + JSON.toJSONString(user, SerializerFeature.WriteMapNullValue));
        System.out.println("指定WriteNullStringAsEmpty序列化結(jié)果:\n" + JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty));
        System.out.println("指定WriteNullNumberAsZero序列化結(jié)果:\n" + JSON.toJSONString(user, SerializerFeature.WriteNullNumberAsZero));
        System.out.println("指定WriteDateUseDateFormat序列化結(jié)果:\n" + JSON.toJSONString(user, SerializerFeature.WriteDateUseDateFormat));
    }

運(yùn)行結(jié)果:

默認(rèn)序列化結(jié)果:
{"createDate":1575038247084,"dataMap":{1:100,2:200},"id":1000,"name":"Java碎碎念"}
指定WriteNonStringKeyAsString序列化結(jié)果:
{"createDate":1575038247084,"dataMap":{"1":100,"2":200},"id":1000,"name":"Java碎碎念"}
指定WriteNonStringValueAsString序列化結(jié)果:
{"createDate":1575038247084,"dataMap":{1:"100",2:"200"},"id":"1000","name":"Java碎碎念"}
指定WriteMapNullValue序列化結(jié)果:
{"age":null,"createDate":1575038247084,"dataMap":{1:100,2:200},"id":1000,"name":"Java碎碎念","sex":null}
指定WriteNullStringAsEmpty序列化結(jié)果:
{"createDate":1575038247084,"dataMap":{1:100,2:200},"id":1000,"name":"Java碎碎念","sex":""}
指定WriteNullNumberAsZero序列化結(jié)果:
{"age":0,"createDate":1575038247084,"dataMap":{1:100,2:200},"id":1000,"name":"Java碎碎念"}
指定WriteDateUseDateFormat序列化結(jié)果:
{"createDate":"2019-11-29 22:37:27","dataMap":{1:100,2:200},"id":1000,"name":"Java碎碎念"}

2.使用JSONField

JSONField是fastjson的一個(gè)注解,可以用在字段上,也可以用在getter/setter方法上面。

  • 2.1 JSONField注解

注解主要內(nèi)容如下:

package com.alibaba.fastjson.annotation;
 
public @interface JSONField {
    // 配置序列化和反序列化的順序,1.1.42版本之后才支持
    int ordinal() default 0;
 
     // 指定字段的名稱
    String name() default "";
 
    // 指定字段的格式,對(duì)日期格式有用
    String format() default "";
 
    // 是否序列化
    boolean serialize() default true;
 
    // 是否反序列化
    boolean deserialize() default true;
}
  • 2.2 JSONField注解配置方式

結(jié)果和預(yù)期一致,說明自定義序列化沒有問題,到此fastjson自定義序列化的功能已經(jīng)全部實(shí)現(xiàn),有問題歡迎留言溝通哦!

配置在字段上

@Data
public class User implements Serializable {
 
    @JSONField(name = "_id")
    private Integer id;
}

配置在getter/setter上

    @JSONField(name="_id")
    public Integer getId() {
        return id;
    }
 
    @JSONField(name="_id")
    public void setId(Integer id) {
        this.id = id;
    }

使用format配置日期格式化

    @JSONField(format="yyyy-MM-dd")
    private Date createDate;

使用serialize/deserialize指定字段不序列化

    @JSONField(serialize=false)
    private Integer age;

下面直接修改代碼看下效果,修改后User類如下:

@Data
public class User implements Serializable {
 
    private static final long serialVersionUID = 1L;
 
    @JSONField(name = "_id", ordinal = 3)
    private Integer id;
 
    @JSONField(serialize = false, ordinal = 4)
    private Integer age;
 
    @JSONField(ordinal = 1)
    private String name;
 
    @JSONField(ordinal = 2)
    private String sex;
 
    @JSONField(format = "yyyy-MM-dd", ordinal = 5)
    private Date createDate;
}

測(cè)試類運(yùn)行結(jié)果如下:

默認(rèn)序列化結(jié)果:
{"age":18,"createDate":1575006127174,"id":1000,"name":"Java碎碎念"}
使用JSONField后序列化結(jié)果:
{"name":"Java碎碎念","_id":1000,"createDate":"2019-11-29"}

通過運(yùn)行結(jié)果可以看到,使用@JSONField注解變化如下:

  • id序列化后變成了_id
  • createDate格式化為yyyy-MM-dd
  • 序列化后字段的順序跟ordinal指定的一致
  • 設(shè)置了serialize=false的字段age沒有序列化

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于SpringMVC中數(shù)據(jù)綁定@ModelAttribute注解的使用

    關(guān)于SpringMVC中數(shù)據(jù)綁定@ModelAttribute注解的使用

    這篇文章主要介紹了關(guān)于SpringMVC中數(shù)據(jù)綁定@ModelAttribute注解的使用,SpringMVC是一個(gè)基于Spring框架的Web框架,它提供了一種簡(jiǎn)單、靈活的方式來開發(fā)Web應(yīng)用程序,在開發(fā)Web應(yīng)用程序時(shí),我們需要將用戶提交的數(shù)據(jù)綁定到我們的Java對(duì)象上,需要的朋友可以參考下
    2023-07-07
  • spring mvc實(shí)現(xiàn)文件上傳與下載功能

    spring mvc實(shí)現(xiàn)文件上傳與下載功能

    這篇文章主要為大家詳細(xì)介紹了spring mvc實(shí)現(xiàn)文件上傳與下載功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • java字符串抉擇

    java字符串抉擇

    下面給大家解析字符串連接方面的知識(shí),包括string,stringbuffer和stringbuilder等方面的知識(shí),對(duì)java字符串知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2016-12-12
  • Java計(jì)算字符串公式的方式解讀

    Java計(jì)算字符串公式的方式解讀

    這篇文章主要介紹了Java計(jì)算字符串公式的方式解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • JDK15正式發(fā)布(新增功能預(yù)覽)

    JDK15正式發(fā)布(新增功能預(yù)覽)

    這篇文章主要介紹了JDK15正式發(fā)布,新增功能預(yù)覽,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2020-09-09
  • Java 獲取當(dāng)前設(shè)備的 IP 地址(最新推薦)

    Java 獲取當(dāng)前設(shè)備的 IP 地址(最新推薦)

    Internet 協(xié)議 (IP) 地址可以是連接到 TCP/IP 網(wǎng)絡(luò)的每個(gè)設(shè)備的標(biāo)識(shí)符,該標(biāo)識(shí)符用于識(shí)別和定位中間通信的節(jié)點(diǎn),這篇文章主要介紹了在 Java 中獲取當(dāng)前設(shè)備的 IP 地址,需要的朋友可以參考下
    2023-06-06
  • Java+opencv3.2.0實(shí)現(xiàn)人臉檢測(cè)功能

    Java+opencv3.2.0實(shí)現(xiàn)人臉檢測(cè)功能

    這篇文章主要為大家詳細(xì)介紹了Java+opencv3.2.0實(shí)現(xiàn)人臉檢測(cè)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • java9新特性Reactive?Stream響應(yīng)式編程?API

    java9新特性Reactive?Stream響應(yīng)式編程?API

    這篇文章主要為大家介紹了java9新特性響應(yīng)式編程API的特點(diǎn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • springboot項(xiàng)目打docker鏡像實(shí)例(入門級(jí))

    springboot項(xiàng)目打docker鏡像實(shí)例(入門級(jí))

    最近做個(gè)項(xiàng)目,我們想把自己的程序打包成鏡像,并運(yùn)行在docker容器中,本文主要介紹了springboot項(xiàng)目打docker鏡像實(shí)例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • java中IO流分為幾類舉例詳解

    java中IO流分為幾類舉例詳解

    Java中的IO流主要分為輸入流和輸出流兩大類,每類又可以根據(jù)數(shù)據(jù)處理方式的不同細(xì)分為多種具體實(shí)現(xiàn),這篇文章主要介紹了java中IO流分為幾類的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-12-12

最新評(píng)論

新龙县| 东城区| 金塔县| 大安市| 临夏县| 汪清县| 通辽市| 郑州市| 嘉义县| 探索| 永靖县| 双峰县| 湖州市| 镇康县| 上虞市| 汤阴县| 鄂州市| 砀山县| 航空| 大埔区| 鄂尔多斯市| 曲靖市| 罗甸县| 辽宁省| 庆安县| 晴隆县| 灌阳县| 南昌县| 绥芬河市| 澳门| 简阳市| 衡阳县| 韶关市| 长泰县| 巴林右旗| 湾仔区| 乐业县| 丹凤县| 临沭县| 会同县| 长宁区|