Java Jackson核心注解使用詳解
前言
在 Java 后端開發(fā)中,Jackson 是最常用的 JSON 序列化/反序列化工具之一。Jackson 提供了一系列功能強大的注解,用于精確控制 JSON 與 Java 對象之間的映射邏輯。本文將深入講解常用的幾個核心注解:
@JsonProperty
:指定字段的 JSON 名稱@JsonIgnore
:忽略字段序列化/反序列化@JsonInclude
:控制字段是否參與序列化(如 null、空集合等)@JsonFormat
:格式化日期時間@JsonCreator
/@JsonValue
:自定義對象的序列化/反序列化邏輯
一、@JsonProperty-指定JSON字段名
默認(rèn)情況下,Jackson 使用 Java 字段名作為 JSON 字段名。但在前后端字段命名不一致時,可以使用 @JsonProperty
顯式指定:
public class User { @JsonProperty("user_name") private String username; // getter/setter }
輸出 JSON:
{ "user_name": "Tom" }
二、@JsonIgnore-忽略字段
@JsonIgnore
用于在序列化或反序列化過程中跳過某些字段,比如密碼、內(nèi)部字段等:
public class Account { private String username; @JsonIgnore private String password; // getter/setter }
輸出 JSON 不包含 password
字段。
三、@JsonInclude-控制是否輸出null或空字段
通過 @JsonInclude
可以控制字段是否輸出。常見選項:
Include.NON_NULL
:忽略 null 值Include.NON_EMPTY
:忽略 null、空字符串、空集合等
@JsonInclude(JsonInclude.Include.NON_NULL) public class Product { private String name; private String description; }
當(dāng) description
為 null 時不會出現(xiàn)在 JSON 中。
也可以作用于類、字段或全局配置:
@JsonInclude(JsonInclude.Include.NON_EMPTY) private List<String> tags;
四、@JsonFormat-格式化時間
Java 中的日期類型默認(rèn)序列化為時間戳。通過 @JsonFormat
可以指定格式和時區(qū):
public class Event { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date eventTime; }
輸出 JSON 中的日期格式為:"2025-05-06 16:00:00"
五、@JsonCreator/@JsonValue-自定義序列化與反序列化
1. @JsonCreator:構(gòu)造方法反序列化
當(dāng)對象沒有默認(rèn)構(gòu)造器,或你希望控制反序列化邏輯時使用:
public class Currency { private String code; @JsonCreator public Currency(@JsonProperty("code") String code) { this.code = code; } public String getCode() { return code; } }
2. @JsonValue:自定義序列化值
如果你希望整個對象在序列化時只輸出某個字段,可以使用 @JsonValue:
public class Status { private final String value; public Status(String value) { this.value = value; } @JsonValue public String getValue() { return value; } }
序列化后將只輸出字符串:
"ACTIVE"
六、完整示例
public class User { @JsonProperty("user_name") private String username; @JsonIgnore private String password; @JsonInclude(JsonInclude.Include.NON_NULL) private String email; @JsonFormat(pattern = "yyyy-MM-dd") private Date birthday; // getters and setters }
七、實戰(zhàn)項目結(jié)構(gòu)與代碼倉庫
示例接口返回序列化結(jié)果
@RestController public class UserController { @GetMapping("/user") public User getUser() { User user = new User(); user.setUsername("alice"); user.setPassword("123456"); user.setEmail(null); user.setBirthday(new Date()); return user; } }
八、總結(jié)
Jackson 提供的注解使我們可以精準(zhǔn)控制對象與 JSON 的映射行為。合理使用 @JsonProperty
、@JsonIgnore
、@JsonInclude
等注解,不僅可以滿足前后端字段差異需求,還能提升代碼的可讀性與可維護(hù)性。
這些注解在實際開發(fā)中廣泛應(yīng)用,是每一位 Java 開發(fā)者都應(yīng)掌握的重要工具。如果你希望構(gòu)建更強大的 JSON 數(shù)據(jù)模型控制體系,Jackson 注解體系是你的得力助手。
以上就是Java Jackson核心注解使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Java Jackson核心注解的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
關(guān)于MyBatis通用Mapper@Table注解使用的注意點
這篇文章主要介紹了關(guān)于MyBatis通用Mapper@Table注解使用的注意點,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11Spring Boot中使用activiti的方法教程(一)
最近一直研究springboot,下面這篇文章主要給大家介紹了關(guān)于Spring Boot中使用activiti的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08圖解Java經(jīng)典算法插入排序的原理與實現(xiàn)
插入排序的算法描述是一種簡單直觀的排序算法。其原理是通過構(gòu)建有序序列,對于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。本文將用Java語言實現(xiàn)插入排序算法并進(jìn)行可視化,感興趣的可以了解一下2022-09-09聊聊Springboot2.x的session和cookie有效期
這篇文章主要介紹了Springboot2.x的session和cookie有效期,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09