JsonProperty及JSONField注解的使用說明
JsonProperty及JSONField注解的使用
1.JsonProperty
1.1.說明
@JsonProperty
注解是 Jackson 庫中的一個注解,廣泛用于 Java 對象與 JSON 數(shù)據(jù)之間的序列化和反序列化。
Jackson 是一個流行的 Java 庫,能夠?qū)?Java 對象轉換為 JSON 格式,反之亦然。
1.2.主要功能
- 指定屬性名:
@JsonProperty
可以用來定義 JSON 中使用的屬性名稱,即使它與 Java 類中的屬性名稱不同。這在需要匹配特定 JSON 格式時非常有用。 - 處理字段的可見性: 可以控制字段是否應該被序列化或反序列化。
- 設置默認值: 可以為字段提供默認值。
- 標記字段的必需性: 可以指示某個字段在反序列化過程中是必需的
1.3.常見屬性
value
: 指定 JSON 字段的名稱。required
: 布爾值,指示在反序列化時該字段是否是必需的(默認為 false)。defaultValue
: 指定一個默認值,當 JSON 數(shù)據(jù)中沒有提供該字段時使用。
import com.fasterxml.jackson.annotation.JsonProperty; public class Product { @JsonProperty(value = "product_id", required = true) private int id; @JsonProperty(value = "product_name", defaultValue = "Unnamed Product") private String name; // Getters and Setters... }
1.4.示例
import com.fasterxml.jackson.annotation.JsonProperty; public class User { @JsonProperty("user_id") private int id; @JsonProperty("user_name") private String name; @JsonProperty("user_email") private String email; // Getters and Setters public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
給定上面的 User
類,下面是其對應的 JSON 表示:
{ "user_id": 1, "user_name": "John Doe", "user_email": "john.doe@example.com" }
2.JSONField
2.1說明
@JSONField
是一個來自于阿里巴巴的 Fastjson 庫的注解,主要用于處理 Java 對象與 JSON 數(shù)據(jù)之間的序列化和反序列化。
Fastjson 是一個高性能的 Java 語言編寫的 JSON 處理工具。一般使用fastjson2。
2.2主要功能
- 指定字段名稱:
@JSONField
可以用來定義在 JSON 中使用的屬性名稱,即使它與 Java 類中的屬性名稱不一致。這對于需要匹配特定 JSON 格式的場景非常有用。 - 控制序列化/反序列化: 可以控制某個字段是否參與序列化和反序列化。例如,可以通過設置
serialize
或deserialize
屬性為false
來排除該字段。 - 格式化日期: 可以指定日期字段在 JSON 中的格式,這對于日期類型的字段尤為重要。
- 定義默認值: 在反序列化時,可以指定默認值,以便當 JSON 數(shù)據(jù)中缺少該字段時使用。
2.3常用屬性
name
: 指定 JSON 字段的名稱。serialize
: 布爾值,指示該字段是否參與序列化(默認為 true)。deserialize
: 布爾值,指示該字段是否參與反序列化(默認為 true)。format
: 用于格式化時間字段,例如"yyyy-MM-dd"
。
import com.alibaba.fastjson.annotation.JSONField; public class Product { @JSONField(name = "product_id", serialize = true, deserialize = true) private int id; @JSONField(name = "product_name", defaultValue = "Unnamed Product") private String name; @JSONField(name = "created_at", format = "yyyy-MM-dd HH:mm:ss") private Date createdAt; // Getters and Setters... }
2.4示例
import com.alibaba.fastjson.annotation.JSONField; public class User { @JSONField(name = "user_id") private int id; @JSONField(name = "user_name") private String name; @JSONField(name = "user_email") private String email; // Getters and Setters public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
使用上面的 User
類,下面是其對應的 JSON 表示:
{ "user_id": 1, "user_name": "John Doe", "user_email": "john.doe@example.com" }
3.使用場景
避免使用lombok的data注解,導致前端接收的json內(nèi)容的key和后端中bean的id不一致的問題,可以使用上面兩個注解,當然也可以手寫get set方法,避免此問題
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java如果通過jdbc操作連接oracle數(shù)據(jù)庫
這篇文章主要介紹了Java如果通過jdbc操作連接oracle數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09SpringBoot項目多數(shù)據(jù)源及mybatis 駝峰失效的問題解決方法
這篇文章主要介紹了SpringBoot項目多數(shù)據(jù)源及mybatis 駝峰失效的問題解決方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07java操作(DOM、SAX、JDOM、DOM4J)xml方式的四種比較與詳解
java中四種操作(DOM、SAX、JDOM、DOM4J)xml方式的比較與詳解2008-10-10SpringBoot使用spring.factories加載默認配置的實現(xiàn)代碼
在日常開發(fā)過程中,發(fā)布一些產(chǎn)品或者框架時,會遇到某些功能需要一些配置才能正常運行,這時我們需要的提供默認配置項,同時用戶也能覆蓋進行個性化2024-06-06java常用工具類 XML工具類、數(shù)據(jù)驗證工具類
這篇文章主要為大家詳細介紹了java常用工具類,包括XML工具類、數(shù)據(jù)驗證工具類,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-05-05