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

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

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

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

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

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

這是一個示例代碼:

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

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

實體類轉(zhuǎn)JSON字段為null時不顯示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,一個最簡單默認(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時輸出""
WriteNullNumberAsZeronumber為null時輸出0
WriteDateUseDateFormat修改日期格式,yyyy-MM-dd

常用的屬性介紹完了,咱們先來看下效果,新建一個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的一個注解,可以用在字段上,也可以用在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 "";
 
    // 指定字段的格式,對日期格式有用
    String format() default "";
 
    // 是否序列化
    boolean serialize() default true;
 
    // 是否反序列化
    boolean deserialize() default true;
}
  • 2.2 JSONField注解配置方式

結(jié)果和預(yù)期一致,說明自定義序列化沒有問題,到此fastjson自定義序列化的功能已經(jīng)全部實現(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;
}

測試類運(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é)

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

相關(guān)文章

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

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

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

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

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

    java字符串抉擇

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

    Java計算字符串公式的方式解讀

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

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

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

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

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

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

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

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

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

    springboot項目打docker鏡像實例(入門級)

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

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

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

最新評論

庆阳市| 汉中市| 青田县| 晋江市| 建德市| 柘城县| 乌拉特前旗| 宁乡县| 安多县| 南京市| 剑阁县| 枣强县| 莒南县| 东乌| 确山县| 抚宁县| 宁安市| 乌兰察布市| 花垣县| 博罗县| 洪湖市| 将乐县| 长乐市| 招远市| 鹤庆县| 洛浦县| 高清| 宁武县| 通化县| 麦盖提县| 凉城县| 太湖县| 七台河市| 屏东县| 徐闻县| 麻城市| 古交市| 怀来县| 醴陵市| 东乌| 大田县|