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

java中@JSONField和@JsonProperty注解的使用說明及對比

 更新時間:2023年11月16日 11:31:12   作者:WgRui  
@JSONField與@JsonProperty隸屬兩個不同的包,前者是阿里系的fastjson包,后者是spring?boot官方使用的jackson包,本文主要介紹了java中@JSONField和@JsonProperty注解的使用說明及對比,感興趣的可以了解一下

@JSONField

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

1. name屬性

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

示例:

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

在上面的例子中,使用@JSONField注解將Java對象中的userId屬性映射為JSON對象中的id屬性

2. format屬性

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

示例:

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

在上面的例子中,使用@JSONField注解指定了birthday屬性的日期格式為“yyyy-MM-dd”,salary屬性的數(shù)字格式為“#,###.00”

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屬性可以指定屬性是否應該直接輸出為JSON字符串

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

示例:

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

在上面的例子中,使用@JSONField注解指定了jsonMessage屬性應該直接輸出為JSON字符串

9. parseFeatures屬性和serializeFeatures屬性

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

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

示例:

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

在上面的例子中,使用@JSONField注解指定了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 Person {

    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 Person {

    private String firstName;

    @JsonProperty(ignore = true)
    private String lastName;
}

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

優(yōu)劣對比

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

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

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

4.在使用Jackson框架時,只能使用@JsonProperty注解,無法使用@JSONField注解

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

相關(guān)文章

  • Java關(guān)于重排鏈表詳細解析

    Java關(guān)于重排鏈表詳細解析

    在我們平時的代碼過程中,鏈表是我們經(jīng)常遇到的一個數(shù)據(jù)結(jié)構(gòu),面試題中鏈表占很大一部分,可見鏈表操作是非常重要的。本篇文章我們來探究一下如何進行重排鏈表
    2022-01-01
  • IDEA創(chuàng)建Servlet程序的兩種實現(xiàn)方法

    IDEA創(chuàng)建Servlet程序的兩種實現(xiàn)方法

    Servlet是JavaWeb應用程序中不可或缺的組件之一,本文主要介紹了IDEA創(chuàng)建Servlet程序的兩種實現(xiàn)方法,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • 使用mybatis進行數(shù)據(jù)插入時返回自增id的方法及注意點

    使用mybatis進行數(shù)據(jù)插入時返回自增id的方法及注意點

    這篇文章主要給大家介紹了關(guān)于使用mybatis進行數(shù)據(jù)插入時返回自增id的方法及注意點,在插入一條數(shù)據(jù)之后需要返回它的自增主鍵id,因為插入的實體類數(shù)據(jù)id為空,后面的邏輯還需要這個id,需要的朋友可以參考下
    2023-09-09
  • 如何在springboot中引入?yún)?shù)校驗

    如何在springboot中引入?yún)?shù)校驗

    一般我們判斷前端傳過來的參數(shù),需要對某些值進行判斷,是否滿足條件,而springboot相關(guān)的參數(shù)校驗注解,可以解決我們這個問題,本文給大家介紹如何在springboot中引入?yún)?shù)校驗,感興趣的朋友一起看看吧
    2023-12-12
  • Java中雙冒號運算符(::)的用法詳解

    Java中雙冒號運算符(::)的用法詳解

    在Java 8引入的Lambda表達式和函數(shù)式接口之后,雙冒號運算符(::)成為了一項重要的功能,下面我們就來學習一下Java中的雙冒號運算符及其常見應用場景吧
    2023-12-12
  • Java+opencv3.2.0之直方圖均衡詳解

    Java+opencv3.2.0之直方圖均衡詳解

    這篇文章主要為大家詳細介紹了Java+opencv3.2.0之直方圖均衡的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • SpringBoot如何配置文件給bean賦值問題

    SpringBoot如何配置文件給bean賦值問題

    這篇文章主要介紹了SpringBoot如何配置文件給bean賦值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 如何優(yōu)雅的處理Spring Boot異常信息詳解

    如何優(yōu)雅的處理Spring Boot異常信息詳解

    這篇文章主要給大家介紹了關(guān)于如何優(yōu)雅的處理Spring Boot異常信息的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring Boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • SpringBoot實現(xiàn)HTTP調(diào)用的七種方式總結(jié)

    SpringBoot實現(xiàn)HTTP調(diào)用的七種方式總結(jié)

    小編在工作中,遇到一些需要調(diào)用三方接口的任務,就需要用到 HTTP 調(diào)用工具,這里,我總結(jié)了一下 實現(xiàn) HTTP 調(diào)用的方式,共有 7 種(后續(xù)會繼續(xù)新增),需要的朋友可以參考下
    2023-09-09
  • 基于JAVA中Jersey處理Http協(xié)議中的Multipart的詳解

    基于JAVA中Jersey處理Http協(xié)議中的Multipart的詳解

    之前在基于C#開發(fā)彩信用最原始的StringBuilder拼接字符串方式處理過Multipart?,F(xiàn)在在做一個項目的時候,由于之前的技術(shù)路線都是使用Jersey處理Http這塊,為了保持技術(shù)路線一致,研究了一下如何使用Jersey處理Http協(xié)議中的Multipart
    2013-05-05

最新評論