亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

可以使用 Gson 庫(kù)中的 GsonBuilder 來(lái)解決這個(gè)問(wèn)題。

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

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

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

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

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

一、什么是fastjson?

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

二、如何使用

添加如下maven依賴(lài)即可:

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

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

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

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

四、如何自定義序列化

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

1.使用序列化屬性SerializerFeature

SerializerFeature常用屬性如下:

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

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

@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)行類(lèi)代碼如下:

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;
 
     // 指定字段的名稱(chēng)
    String name() default "";
 
    // 指定字段的格式,對(duì)日期格式有用
    String format() default "";
 
    // 是否序列化
    boolean serialize() default true;
 
    // 是否反序列化
    boolean deserialize() default true;
}
  • 2.2 JSONField注解配置方式

結(jié)果和預(yù)期一致,說(shuō)明自定義序列化沒(méi)有問(wèn)題,到此fastjson自定義序列化的功能已經(jīng)全部實(shí)現(xiàn),有問(wè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類(lèi)如下:

@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è)試類(lèi)運(yùn)行結(jié)果如下:

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

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

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

總結(jié)

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Java棋類(lèi)游戲?qū)嵺`之中國(guó)象棋

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

    Java?工具類(lèi)實(shí)現(xiàn)音頻音量提升

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

最新評(píng)論