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

Java中@JSONField和@JsonProperty注解的用法及區(qū)別詳解

 更新時間:2024年06月07日 09:53:51   作者:MinggeQingchun  
@JsonProperty和@JSONField注解都是為了解決obj轉(zhuǎn)json字符串的時候,將java bean的屬性名替換成目標屬性名,下面這篇文章主要給大家介紹了關(guān)于Java中@JSONField和@JsonProperty注解的用法及區(qū)別的相關(guān)資料,需要的朋友可以參考下

前言

@JSONField注解是阿里巴巴的fastjson框架中的注解,用于指定JSON字符串中的屬性名和Java對象中的屬性名之間的映射關(guān)系

@JsonProperty注解是Jackson框架中的注解,用法類似于@JSONField,也是指定JSON字符串中的屬性名和Java對象中的屬性名之間的映射關(guān)系

一、@JSONField

@JSONField注解是阿里巴巴的fastjson框架中的注解,用于指定JSON字符串中的屬性名和Java對象中的屬性名之間的映射關(guān)系

1、name屬性

通過name屬性可以指定將Java對象中的屬性名映射為JSON對象中的屬性名。默認情況下,JSON對象中的屬性名與Java對象中的屬性名相同

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;

public class Test1Controller {
    public static void main(String[] args) {
        String str = "{\"ID\":11,\"Name\":\"張三\"}";

        User user = JSON.parseObject(str, User.class);
        System.out.println("User對象:" + user.toString());
    }
}

@Data
class User {
    @JSONField(name = "ID")
    private Integer userId;
    @JSONField(name = "Name")
    private String userName;

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                '}';
    }
}

2、format屬性

通過format屬性可以指定日期類型屬性的格式,以及將數(shù)字類型轉(zhuǎn)為字符串類型的格式

public class User {
    @JSONField(format = "yyyy-MM-dd")
    private Date birthday;
    @JSONField(format = "#,###.00")
    private double salary;
}

3、serialize屬性

通過serialize屬性可以控制屬性是否序列化到JSON對象中

當serialize屬性為false時,屬性將不會序列化到JSON對象中,默認為true

public class User {
    @JSONField(serialize = false)
    private int userId;
    private String name;
    private int age;
}

使用@JSONField注解將userId屬性從序列化中排除

4、deserialize屬性

通過deserialize屬性可以控制是否將JSON對象中的屬性反序列化到Java對象中

當deserialize屬性為false時,該屬性將不會從JSON對象中反序列化到Java對象中,默認為true

public class User {
    private int userId;
    private String name;
    @JSONField(deserialize = false)
    private int age;
}

使用@JSONField注解將age屬性從反序列化中排除

5、ordinal屬性

通過ordinal屬性可以指定屬性的順序

默認情況下,屬性的順序是按照屬性在Java對象中的順序排列的

public class User {
    @JSONField(ordinal = 2)
    private String name;
    @JSONField(ordinal = 1)
    private int age;
}

使用@JSONField注解指定了age屬性的順序為1,name屬性的順序為2

6、defaultValue屬性

通過defaultValue屬性可以指定屬性在Java對象中的默認值

public class User {
    @JSONField(defaultValue = "0")
    private int userId;
    @JSONField(defaultValue = "N/A")
    private String name;
    private int age;
}

使用@JSONField注解指定了userId屬性的默認值為0,name屬性的默認值為“N/A”

7、type屬性

通過type屬性可以指定屬性的類型

public class User {
    private int userId;
    @JSONField(type = FieldType.STRING)
    private int age;
}

使用@JSONField注解指定了age屬性的類型為字符串類型

8、jsonDirect屬性

通過jsonDirect屬性可以指定屬性是否應(yīng)該直接輸出為JSON字符串

默認情況下,屬性將被轉(zhuǎn)化為字符串并以引號標記輸出

public class User {
    private String name;
    @JSONField(jsonDirect = true)
    private String jsonMessage;
}

使用@JSONField注解指定了jsonMessage屬性應(yīng)該直接輸出為JSON字符串

9、parseFeatures屬性和serializeFeatures屬性

通過parseFeatures屬性和serializeFeatures屬性可以配置解析和序列化時的特性

具體可參考阿里巴巴fastjson的文檔

public class User {
    private String name;
    private int age;
    @JSONField(parseFeatures = Feature.AllowSingleQuotes)
    private String message;
}

二、@JsonProperty

@JsonProperty注解是Jackson框架中的注解,用法類似于@JSONField,也是指定JSON字符串中的屬性名和Java對象中的屬性名之間的映射關(guān)系

1、value

value屬性用于指定序列化后的屬性名稱

如果未提供value屬性,則屬性名稱默認與Java屬性名稱相同

public class Person {
    @JsonProperty("name")
    private String fullName;
}

將Java對象中fullName屬性序列化為JSON對象中的"name"屬性

2、defaultValue

defaultValue屬性用于指定當Java對象屬性值為null時,序列化為JSON時使用的默認值

該屬性僅適用于對象屬性而不適用于基本類型屬性

public class Person {
    @JsonProperty(defaultValue = "John")
    private String firstName;
}

將未設(shè)置firstName的Person對象序列化為含有默認值"John"的JSON屬性

3、access

access屬性用于指定Java屬性的訪問級別

默認訪問級別為PUBLIC,也可以設(shè)為READ_ONLY或WRITE_ONLY

public class Person {
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String password;
}

將Java對象中的password屬性序列化為JSON時忽略掉

4、required

required屬性指定此屬性是否為必須字段

如果為true,則當將JSON轉(zhuǎn)換回Java對象時,如果該屬性不存在,則將引發(fā)異常

public class Person {
    @JsonProperty(required = true)
    private String name;
}

將Java對象中的name屬性序列化為確保其在JSON對象中存在

5、defaultValue

defaultValue屬性用于指定Java屬性的默認值

在將JSON轉(zhuǎn)換回Java對象時如果該屬性不存在或為null,則使用默認值

public class Person {
    @JsonProperty(defaultValue = "30")
    private int age;
}

將Java對象中的age屬性序列化為JSON時,如果該屬性不存在,則使用默認值30

6、index

index屬性用于指定序列化的屬性在JSON對象中的位置,數(shù)值越小,位置越靠前

public class Person {
    @JsonProperty(index = 1)
    private String firstName;
    @JsonProperty(index = 0)
    private String lastName;
}

將Java對象中的lastName屬性序列化為JSON對象中的第一個屬性,firstName屬性序列化為JSON對象中的第二個屬性

7、accessMode

accessMode屬性用于指定序列化時使用的訪問模式

如果未指定,則默認為PROPETY模式,即訪問getter方法獲取屬性值。另一個可用的模式是FIELD,即直接訪問Java屬性

public class User {
    private String firstName;
    @JsonProperty(access = JsonProperty.Access.READ_ONLY, accessMode = JsonProperty.AccessMode.FIELD)
    private String lastName;
}

將Java對象中l(wèi)astName屬性序列化為JSON屬性,直接訪問Java屬性值。

8、ignore

ignore屬性用于指定是否忽略該屬性

如果為true,則在序列化和反序列化時忽略該屬性

public class User{
    private String firstName;
    @JsonProperty(ignore = true)
    private String lastName;
}

將Java對象中的lastName屬性忽略掉,不進行序列化和反序列化

三、@JSONField和@JsonProperty區(qū)別

1、@JSONField注解的使用方式更加簡單,注解默認的值與屬性名相同,而@JsonProperty需要手動指定屬性名

2、@JSONField注解支持更多的屬性映射選項,例如序列化時的日期格式,空值的處理方式等

3、@JSONField注解的性能較快,因為fastjson本身就是一款高性能的JSON處理庫

4、在使用Jackson框架時,只能使用@JsonProperty注解,無法使用@JSONField注解?。?!不然會導致解析失敗,無法取到值,如下

import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

public class Test1Controller {
    public static void main(String[] args) {
        String str = "{\"ID\":11,\"Name\":\"張三\"}";

        User user = JSON.parseObject(str, User.class);
        System.out.println("User對象:" + user.toString());
    }
}

@Data
class User {
    @JsonProperty("ID")
    private Integer userId;
    @JsonProperty("Name")
    private String userName;

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                '}';
    }
}

總結(jié) 

到此這篇關(guān)于Java中@JSONField和@JsonProperty注解的用法及區(qū)別的文章就介紹到這了,更多相關(guān)Java @JSONField和@JsonProperty注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Spirng Boot Admin監(jiān)控Spring Cloud應(yīng)用項目

    使用Spirng Boot Admin監(jiān)控Spring Cloud應(yīng)用項目

    這篇文章主要介紹了使用Spirng Boot Admin監(jiān)控Spring Cloud應(yīng)用項目,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • ElasticSearch啟動成功卻無法在瀏覽器訪問問題解決辦法

    ElasticSearch啟動成功卻無法在瀏覽器訪問問題解決辦法

    因工作的需要,要使用elasticsearch,安裝完了,啟動也成功了之后發(fā)現(xiàn)了問題,這篇文章主要給大家介紹了關(guān)于ElasticSearch啟動成功卻無法在瀏覽器訪問問題的解決辦法,需要的朋友可以參考下
    2024-10-10
  • java中Pulsar?InterruptedException?異常

    java中Pulsar?InterruptedException?異常

    這篇文章主要為大家介紹了java中Pulsar?InterruptedException?異常分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 徹底理解Java中的ThreadLocal

    徹底理解Java中的ThreadLocal

     ThreadLocal翻譯成中文比較準確的叫法應(yīng)該是:線程局部變量。使用這個工具類可以很簡潔地編寫出優(yōu)美的多線程程序。 接下來通過本文給大家介紹Java中的ThreadLocal,需要的朋友可以參考下
    2017-03-03
  • 淺談java中六大時間類的使用和區(qū)別

    淺談java中六大時間類的使用和區(qū)別

    下面小編就為大家?guī)硪黄獪\談java中六大時間類的使用和區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • springboot+mybatis如何屏蔽掉mybatis日志

    springboot+mybatis如何屏蔽掉mybatis日志

    這篇文章主要介紹了springboot+mybatis如何屏蔽掉mybatis日志問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • SpringBoot中定位切點的兩種常用方法

    SpringBoot中定位切點的兩種常用方法

    有時候,我們使用AOP來進行放的增強,編寫切面類的時候,需要定位在哪個方法上試用該切面進行增強,本片文章主要講解兩種在SpringBoot中定位切點的方法,感興趣的可以了解一下
    2021-06-06
  • Java設(shè)計模式中的設(shè)計原則之合成復(fù)用原則詳解

    Java設(shè)計模式中的設(shè)計原則之合成復(fù)用原則詳解

    這篇文章主要介紹了Java設(shè)計模式中的設(shè)計原則之合成復(fù)用原則詳解,原則是盡量使用合成/聚合的方式,而不是使用繼承聚合關(guān)系表示的是整體和部分的關(guān)系,整體與部分可以分開,可以理解為成員變量和當前類的關(guān)系就是聚合關(guān)系,需要的朋友可以參考下
    2023-11-11
  • springboot如何讀取模板文件

    springboot如何讀取模板文件

    這篇文章主要介紹了springboot如何讀取模版文件的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java使用ant.jar執(zhí)行SQL腳本文件的示例代碼

    Java使用ant.jar執(zhí)行SQL腳本文件的示例代碼

    這篇文章主要介紹了Java使用ant.jar執(zhí)行SQL腳本文件,文中通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-02-02

最新評論