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

Java Jackson核心注解使用詳解

 更新時間:2025年05月10日 16:54:17   作者:Stay Passion  
這篇文章主要介紹了Java Jackson核心注解的使用,??Jackson核心注解??用于控制Java對象與JSON之間的序列化、反序列化行為,簡化字段映射、格式轉(zhuǎn)換與數(shù)據(jù)過濾,需要的朋友可以參考下

前言

在 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注解使用的注意點

    這篇文章主要介紹了關(guān)于MyBatis通用Mapper@Table注解使用的注意點,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring Boot中使用activiti的方法教程(一)

    Spring Boot中使用activiti的方法教程(一)

    最近一直研究springboot,下面這篇文章主要給大家介紹了關(guān)于Spring Boot中使用activiti的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • Java基礎(chǔ)之TreeMap詳解

    Java基礎(chǔ)之TreeMap詳解

    這篇文章主要介紹了Java基礎(chǔ)之TreeMap詳解,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 詳細(xì)分析JAVA8新特性 Base64

    詳細(xì)分析JAVA8新特性 Base64

    這篇文章主要介紹了JAVA8新特性 Base64的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • 深入解析spring?AOP原理及源碼

    深入解析spring?AOP原理及源碼

    這篇文章主要介紹了spring?AOP原理及源碼分析,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒,需要的朋友可以參考下
    2022-04-04
  • 圖解Java經(jīng)典算法插入排序的原理與實現(xiàn)

    圖解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有效期

    這篇文章主要介紹了Springboot2.x的session和cookie有效期,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 解決JDBC連接Mysql長時間無動作連接失效的問題

    解決JDBC連接Mysql長時間無動作連接失效的問題

    這篇文章主要介紹了解決JDBC連接Mysql長時間無動作連接失效的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Java常見的轉(zhuǎn)義字符舉例詳解

    Java常見的轉(zhuǎn)義字符舉例詳解

    在java字符常量中,反斜杠(\)是一個特殊的字符,被稱為轉(zhuǎn)義字符,它的作用是用來轉(zhuǎn)義后面一個字符,這篇文章主要給大吉介紹了關(guān)于Java常見轉(zhuǎn)義字符的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • Java中的Object類詳細(xì)介紹

    Java中的Object類詳細(xì)介紹

    這篇文章主要介紹了Java中的Object類詳細(xì)介紹,本文講解了Object類的作用、Object類的主要方法、Object類中不能被重寫的方法、Object類的equals方法重寫實例等內(nèi)容,需要的朋友可以參考下
    2015-06-06

最新評論