欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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;
 
}

運行類代碼如下:

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));
    }

運行結(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;
}

測試類運行結(jié)果如下:

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

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

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

總結(jié)

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

相關(guān)文章

  • Java中的異常測試框架JUnit使用上手指南

    Java中的異常測試框架JUnit使用上手指南

    這篇文章主要介紹了Java的異常測試框架JUnit使用上手指南,JUnit是Java代碼進(jìn)行單元測試中的常用工具,需要的朋友可以參考下
    2016-03-03
  • 9個java數(shù)組常用操作實例

    9個java數(shù)組常用操作實例

    在本篇文章里小編給各位整理了關(guān)于java數(shù)組常用操作的實例以及相關(guān)的代碼,需要的朋友們跟著學(xué)習(xí)下。
    2019-07-07
  • SpringBoot集成ENC對配置文件進(jìn)行加密的流程步驟

    SpringBoot集成ENC對配置文件進(jìn)行加密的流程步驟

    Spring Boot Encoder,即Spring Boot加密模塊,它提供了一種簡單的方式來集成安全編碼功能到Spring Boot應(yīng)用程序中,它是Spring Security框架的一部分,旨在幫助開發(fā)者輕松地處理數(shù)據(jù)加密,本文給大家介紹了SpringBoot集成ENC對配置文件進(jìn)行加密的流程步驟
    2024-12-12
  • springmvc實現(xiàn)文件上傳功能

    springmvc實現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了springmvc實現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • MyBatis批量插入/修改/刪除MySql數(shù)據(jù)

    MyBatis批量插入/修改/刪除MySql數(shù)據(jù)

    這篇文章主要給大家介紹了關(guān)于MyBatis批量插入/修改/刪除MySql數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 使用maven命令實現(xiàn)下載依賴jar

    使用maven命令實現(xiàn)下載依賴jar

    這篇文章主要介紹了使用maven命令實現(xiàn)下載依賴jar方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • SpringBoot集成Beetl后統(tǒng)一處理頁面異常的方法

    SpringBoot集成Beetl后統(tǒng)一處理頁面異常的方法

    這篇文章主要介紹了SpringBoot集成Beetl后統(tǒng)一處理頁面異常的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • java實現(xiàn)輸出任意整數(shù)的每一位

    java實現(xiàn)輸出任意整數(shù)的每一位

    這篇文章主要介紹了java實現(xiàn)輸出任意整數(shù)的每一位,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java棋類游戲?qū)嵺`之中國象棋

    Java棋類游戲?qū)嵺`之中國象棋

    這篇文章主要為大家詳細(xì)介紹了Java棋類游戲中的中國象棋實現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Java?工具類實現(xiàn)音頻音量提升

    Java?工具類實現(xiàn)音頻音量提升

    本文主要介紹了可以將音頻提升音量的一個java工具類示例代碼,代碼具有一定的學(xué)習(xí)價值,感興趣的小伙伴來了解一下吧,,希望能夠給你帶來幫助
    2021-11-11

最新評論