Java Jackson核心注解使用詳解
前言
在 Java 后端開發(fā)中,Jackson 是最常用的 JSON 序列化/反序列化工具之一。Jackson 提供了一系列功能強(qiáng)大的注解,用于精確控制 JSON 與 Java 對(duì)象之間的映射邏輯。本文將深入講解常用的幾個(gè)核心注解:
@JsonProperty:指定字段的 JSON 名稱@JsonIgnore:忽略字段序列化/反序列化@JsonInclude:控制字段是否參與序列化(如 null、空集合等)@JsonFormat:格式化日期時(shí)間@JsonCreator/@JsonValue:自定義對(duì)象的序列化/反序列化邏輯
一、@JsonProperty-指定JSON字段名
默認(rèn)情況下,Jackson 使用 Java 字段名作為 JSON 字段名。但在前后端字段命名不一致時(shí),可以使用 @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 可以控制字段是否輸出。常見選項(xiàng):
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 時(shí)不會(huì)出現(xiàn)在 JSON 中。
也可以作用于類、字段或全局配置:
@JsonInclude(JsonInclude.Include.NON_EMPTY) private List<String> tags;
四、@JsonFormat-格式化時(shí)間
Java 中的日期類型默認(rèn)序列化為時(shí)間戳。通過 @JsonFormat 可以指定格式和時(shí)區(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)對(duì)象沒有默認(rèn)構(gòu)造器,或你希望控制反序列化邏輯時(shí)使用:
public class Currency {
private String code;
@JsonCreator
public Currency(@JsonProperty("code") String code) {
this.code = code;
}
public String getCode() { return code; }
}2. @JsonValue:自定義序列化值
如果你希望整個(gè)對(duì)象在序列化時(shí)只輸出某個(gè)字段,可以使用 @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
}七、實(shí)戰(zhàn)項(xiàng)目結(jié)構(gòu)與代碼倉(cāng)庫
示例接口返回序列化結(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)控制對(duì)象與 JSON 的映射行為。合理使用 @JsonProperty、@JsonIgnore、@JsonInclude 等注解,不僅可以滿足前后端字段差異需求,還能提升代碼的可讀性與可維護(hù)性。
這些注解在實(shí)際開發(fā)中廣泛應(yīng)用,是每一位 Java 開發(fā)者都應(yīng)掌握的重要工具。如果你希望構(gòu)建更強(qiáng)大的 JSON 數(shù)據(jù)模型控制體系,Jackson 注解體系是你的得力助手。
以上就是Java Jackson核心注解使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Java Jackson核心注解的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
關(guān)于MyBatis通用Mapper@Table注解使用的注意點(diǎn)
這篇文章主要介紹了關(guān)于MyBatis通用Mapper@Table注解使用的注意點(diǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
Spring Boot中使用activiti的方法教程(一)
最近一直研究springboot,下面這篇文章主要給大家介紹了關(guān)于Spring Boot中使用activiti的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08
圖解Java經(jīng)典算法插入排序的原理與實(shí)現(xiàn)
插入排序的算法描述是一種簡(jiǎn)單直觀的排序算法。其原理是通過構(gòu)建有序序列,對(duì)于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。本文將用Java語言實(shí)現(xiàn)插入排序算法并進(jìn)行可視化,感興趣的可以了解一下2022-09-09
聊聊Springboot2.x的session和cookie有效期
這篇文章主要介紹了Springboot2.x的session和cookie有效期,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
解決JDBC連接Mysql長(zhǎng)時(shí)間無動(dòng)作連接失效的問題
這篇文章主要介紹了解決JDBC連接Mysql長(zhǎng)時(shí)間無動(dòng)作連接失效的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03

