Java利用Jackson轻松处理JSON序列化与反序列化
目录
- 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://www.cnblogs.com/jiaodaoniujava/
该文章来源互联网,本博仅以学习为目的,版权归原作者所有。
若内容有侵犯您权益的地方,请公告栏处联系本人,本人定积极配合处理解决。