java中@JSONField和@JsonProperty注解的使用說明及對(duì)比
@JSONField
@JSONField注解是阿里巴巴的fastjson框架中的注解,用于指定JSON字符串中的屬性名和Java對(duì)象中的屬性名之間的映射關(guān)系
1. name屬性
通過name屬性可以指定將Java對(duì)象中的屬性名映射為JSON對(duì)象中的屬性名。默認(rèn)情況下,JSON對(duì)象中的屬性名與Java對(duì)象中的屬性名相同
示例:
public class User { @JSONField(name = "id") private int userId; private String name; private int age; }
在上面的例子中,使用@JSONField注解將Java對(duì)象中的userId屬性映射為JSON對(duì)象中的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對(duì)象中
當(dāng)serialize屬性為false時(shí),屬性將不會(huì)序列化到JSON對(duì)象中,默認(rèn)為true
示例:
public class User { @JSONField(serialize = false) private int userId; private String name; private int age; }
在上面的例子中,使用@JSONField注解將userId屬性從序列化中排除
4. deserialize屬性
通過deserialize屬性可以控制是否將JSON對(duì)象中的屬性反序列化到Java對(duì)象中
當(dāng)deserialize屬性為false時(shí),該屬性將不會(huì)從JSON對(duì)象中反序列化到Java對(duì)象中,默認(rèn)為true
示例:
public class User { private int userId; private String name; @JSONField(deserialize = false) private int age; }
在上面的例子中,使用@JSONField注解將age屬性從反序列化中排除
5. ordinal屬性
通過ordinal屬性可以指定屬性的順序
默認(rèn)情況下,屬性的順序是按照屬性在Java對(duì)象中的順序排列的
示例:
public class User { @JSONField(ordinal = 2) private String name; @JSONField(ordinal = 1) private int age; }
在上面的例子中,使用@JSONField注解指定了age屬性的順序?yàn)?,name屬性的順序?yàn)?
6. defaultValue屬性
通過defaultValue屬性可以指定屬性在Java對(duì)象中的默認(rèn)值
示例:
public class User { @JSONField(defaultValue = "0") private int userId; @JSONField(defaultValue = "N/A") private String name; private int age; }
在上面的例子中,使用@JSONField注解指定了userId屬性的默認(rèn)值為0,name屬性的默認(rèn)值為“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字符串
默認(rèn)情況下,屬性將被轉(zhuǎn)化為字符串并以引號(hào)標(biāo)記輸出
示例:
public class User { private String name; @JSONField(jsonDirect = true) private String jsonMessage; }
在上面的例子中,使用@JSONField注解指定了jsonMessage屬性應(yīng)該直接輸出為JSON字符串
9. parseFeatures屬性和serializeFeatures屬性
通過parseFeatures屬性和serializeFeatures屬性可以配置解析和序列化時(shí)的特性
具體可參考阿里巴巴fastjson的文檔
示例:
public class User { private String name; private int age; @JSONField(parseFeatures = Feature.AllowSingleQuotes) private String message; }
在上面的例子中,使用@JSONField注解指定了message屬性在解析時(shí)允許使用單引號(hào)
@JsonProperty
@JsonProperty注解是Jackson框架中的注解,用法類似于@JSONField,也是指定JSON字符串中的屬性名和Java對(duì)象中的屬性名之間的映射關(guān)系
1. value
value屬性用于指定序列化后的屬性名稱
如果未提供value屬性,則屬性名稱默認(rèn)與Java屬性名稱相同
示例:
public class Person { @JsonProperty("name") private String fullName; }
在上面的例子中,將Java對(duì)象中fullName屬性序列化為JSON對(duì)象中的"name"屬性
2. defaultValue
defaultValue屬性用于指定當(dāng)Java對(duì)象屬性值為null時(shí),序列化為JSON時(shí)使用的默認(rèn)值
該屬性僅適用于對(duì)象屬性而不適用于基本類型屬性
示例:
public class Person { @JsonProperty(defaultValue = "John") private String firstName; }
在上面的例子中,將未設(shè)置firstName的Person對(duì)象序列化為含有默認(rèn)值"John"的JSON屬性
3. access
access屬性用于指定Java屬性的訪問級(jí)別
默認(rèn)訪問級(jí)別為PUBLIC,也可以設(shè)為READ_ONLY或WRITE_ONLY
示例:
public class Person { @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) private String password; }
在上面的例子中,將Java對(duì)象中的password屬性序列化為JSON時(shí)忽略掉
4. required
required屬性指定此屬性是否為必須字段
如果為true,則當(dāng)將JSON轉(zhuǎn)換回Java對(duì)象時(shí),如果該屬性不存在,則將引發(fā)異常
示例:
public class Person { @JsonProperty(required = true) private String name; }
在上面的例子中,將Java對(duì)象中的name屬性序列化為確保其在JSON對(duì)象中存在
5. defaultValue
defaultValue屬性用于指定Java屬性的默認(rèn)值
在將JSON轉(zhuǎn)換回Java對(duì)象時(shí)如果該屬性不存在或?yàn)閚ull,則使用默認(rèn)值
示例:
public class Person { @JsonProperty(defaultValue = "30") private int age; }
在上面的例子中,將Java對(duì)象中的age屬性序列化為JSON時(shí),如果該屬性不存在,則使用默認(rèn)值30
6. index
index屬性用于指定序列化的屬性在JSON對(duì)象中的位置,數(shù)值越小,位置越靠前
示例:
public class Person { @JsonProperty(index = 1) private String firstName; @JsonProperty(index = 0) private String lastName; }
在上面的例子中,將Java對(duì)象中的lastName屬性序列化為JSON對(duì)象中的第一個(gè)屬性,firstName屬性序列化為JSON對(duì)象中的第二個(gè)屬性
7. accessMode
accessMode屬性用于指定序列化時(shí)使用的訪問模式
如果未指定,則默認(rèn)為PROPETY模式,即訪問getter方法獲取屬性值。另一個(gè)可用的模式是FIELD,即直接訪問Java屬性
示例:
public class Person { private String firstName; @JsonProperty(access = JsonProperty.Access.READ_ONLY, accessMode = JsonProperty.AccessMode.FIELD) private String lastName; }
在上面的例子中,將Java對(duì)象中l(wèi)astName屬性序列化為JSON屬性,直接訪問Java屬性值。
8. ignore
ignore屬性用于指定是否忽略該屬性
如果為true,則在序列化和反序列化時(shí)忽略該屬性
示例:
public class Person { private String firstName; @JsonProperty(ignore = true) private String lastName; }
在上面的例子中,將Java對(duì)象中的lastName屬性忽略掉,不進(jìn)行序列化和反序列化
優(yōu)劣對(duì)比
1.@JSONField注解的使用方式更加簡單,注解默認(rèn)的值與屬性名相同,而@JsonProperty需要手動(dòng)指定屬性名
2.@JSONField注解支持更多的屬性映射選項(xiàng),例如序列化時(shí)的日期格式,空值的處理方式等
3.@JSONField注解的性能較快,因?yàn)閒astjson本身就是一款高性能的JSON處理庫
4.在使用Jackson框架時(shí),只能使用@JsonProperty注解,無法使用@JSONField注解
到此這篇關(guān)于java中@JSONField和@JsonProperty注解的使用說明及對(duì)比的文章就介紹到這了,更多相關(guān)java @JSONField和@JsonProperty 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IDEA創(chuàng)建Servlet程序的兩種實(shí)現(xiàn)方法
Servlet是JavaWeb應(yīng)用程序中不可或缺的組件之一,本文主要介紹了IDEA創(chuàng)建Servlet程序的兩種實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10使用mybatis進(jìn)行數(shù)據(jù)插入時(shí)返回自增id的方法及注意點(diǎn)
這篇文章主要給大家介紹了關(guān)于使用mybatis進(jìn)行數(shù)據(jù)插入時(shí)返回自增id的方法及注意點(diǎn),在插入一條數(shù)據(jù)之后需要返回它的自增主鍵id,因?yàn)椴迦氲膶?shí)體類數(shù)據(jù)id為空,后面的邏輯還需要這個(gè)id,需要的朋友可以參考下2023-09-09如何在springboot中引入?yún)?shù)校驗(yàn)
一般我們判斷前端傳過來的參數(shù),需要對(duì)某些值進(jìn)行判斷,是否滿足條件,而springboot相關(guān)的參數(shù)校驗(yàn)注解,可以解決我們這個(gè)問題,本文給大家介紹如何在springboot中引入?yún)?shù)校驗(yàn),感興趣的朋友一起看看吧2023-12-12Java中雙冒號(hào)運(yùn)算符(::)的用法詳解
在Java 8引入的Lambda表達(dá)式和函數(shù)式接口之后,雙冒號(hào)運(yùn)算符(::)成為了一項(xiàng)重要的功能,下面我們就來學(xué)習(xí)一下Java中的雙冒號(hào)運(yùn)算符及其常見應(yīng)用場景吧2023-12-12SpringBoot實(shí)現(xiàn)HTTP調(diào)用的七種方式總結(jié)
小編在工作中,遇到一些需要調(diào)用三方接口的任務(wù),就需要用到 HTTP 調(diào)用工具,這里,我總結(jié)了一下 實(shí)現(xiàn) HTTP 調(diào)用的方式,共有 7 種(后續(xù)會(huì)繼續(xù)新增),需要的朋友可以參考下2023-09-09基于JAVA中Jersey處理Http協(xié)議中的Multipart的詳解
之前在基于C#開發(fā)彩信用最原始的StringBuilder拼接字符串方式處理過Multipart?,F(xiàn)在在做一個(gè)項(xiàng)目的時(shí)候,由于之前的技術(shù)路線都是使用Jersey處理Http這塊,為了保持技術(shù)路線一致,研究了一下如何使用Jersey處理Http協(xié)議中的Multipart2013-05-05