目錄
- 1. @JsonProperty
- 2. @JsonFormat
- 3. @JsonIgnore
- 4. @JsonIgnoreProperties
- 5. @JsonInclude
- 6. @JsonTypeInfo 和 @JsonSubTypes
- 7. @JsonView
- 8. @JsonNaming
- 9. @JsonSerialize 和 @JsonDeserialize
- 10. @JsonAnyGetter 和 @JsonAnySetter
- 11. @JsonIdentityInfo
- 總結
1. @JsonProperty
@JsonProperty
注解用于自定義 JSON 屬性名稱,以及在序列化和反序列化過程中控制屬性的包含。通過使用這個注解,您可以確保 JSON 數據與 Java 對象之間正確映射。
public class User { @JsonProperty("first_name") private String firstName; // ... }
2. @JsonFormat
@JsonFormat
注解用于指定日期、時間和數字的格式。這使得您可以自定義如何在 JSON 中表示這些值。
public class User { @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") private LocalDate birthDate; // ... }
3. @JsonIgnore
@JsonIgnore
注解用于在序列化和反序列化過程中忽略某個屬性。這在處理敏感數據或不需要序列化的字段時非常有用。
public class User { @JsonIgnore private String password; // ... }
4. @JsonIgnoreProperties
@JsonIgnoreProperties
注解用于在類級別忽略一個或多個屬性。這對于在處理來自外部系統的 JSON 數據時忽略未知屬性很有用。
@JsonIgnoreProperties({"age", "address"}) public class User { // ... }
5. @JsonInclude
@JsonInclude
注解用于指定僅在某些條件下才包含屬性。例如,您可以要求僅在屬性具有非空值時才包含它。
@JsonInclude(JsonInclude.Include.NON_NULL) public class User { private String middleName; // ... }
6. @JsonTypeInfo 和 @JsonSubTypes
@JsonTypeInfo
和 @JsonSubTypes
注解用于處理多態類型。這些注解使得在序列化和反序列化時能夠正確處理繼承關系和類型信息。
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") @JsonSubTypes({ @JsonSubTypes.Type(value = Manager.class, name = "manager"), @JsonSubTypes.Type(value = Employee.class, name = "employee") }) public abstract class Person { // ... }
7. @JsonView
@JsonView
注解用于根據視圖定義序列化時包含的屬性。這允許您根據不同的上下文返回不同的 JSON 結構。
public class User { @JsonView(Views.Public.class) private String firstName; @JsonView(Views.Internal.class) private String ssn; // ... }
8. @JsonNaming
@JsonNaming
注解用于自定義屬性名稱的命名策略。例如,您可以將所有屬性名稱自動轉換為蛇形命名法。
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) public class User { private String firstName; private String lastName; // ... }
9. @JsonSerialize 和 @JsonDeserialize
@JsonSerialize
和 @JsonDeserialize
注解用于指定自定義的序列化和反序列化器。這在處理復雜的數據類型或需要定制序列化邏輯的情況下非常有用。
public class User { @JsonSerialize(using = CustomDateSerializer.class) @JsonDeserialize(using = CustomDateDeserializer.class) private LocalDate birthDate; // ... }
10. @JsonAnyGetter 和 @JsonAnySetter
@JsonAnyGetter
和 @JsonAnySetter
注解用于處理動態屬性。這些注解允許您在序列化和反序列化過程中處理未知或動態生成的屬性。
public class User { private Map<String, Object> properties; @JsonAnyGetter public Map<String, Object> getProperties() { return properties; } @JsonAnySetter public void setProperty(String key, Object value) { properties.put(key, value); } // ... }
11. @JsonIdentityInfo
@JsonIdentityInfo
注解用于處理循環引用和重復引用的問題。它可以確保在序列化和反序列化過程中正確處理對象間的關系。
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id") public class User { private int id; private List<User> friends; // ... }
總結
Jackson 提供了豐富的注解來處理各種 JSON 序列化和反序列化需求。通過了解這些注解及其用途,您將能夠更高效地處理 JSON 數據。請記住,根據您的需求和具體場景選擇合適的注解非常重要。希望本文能幫助您更好地理解和使用 Jackson 注解。
原文地址:https://juejin.cn/post/7229598397250732089