Jackson 注解汇总:轻松处理 JSON 序列化与反序列化

news/2025/1/3 7:40:43/

Jackson 是 Java 中最流行的 JSON 处理库之一,它提供了许多注解来简化 JSON 的序列化和反序列化过程。这篇文章将介绍一些 Jackson 常用的注解,以帮助您更轻松地处理 JSON 数据。

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 {@JsonIgnoreprivate 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;@JsonAnyGetterpublic Map<String, Object> getProperties() {return properties;}@JsonAnySetterpublic 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 注解。


http://www.ppmy.cn/news/62704.html

相关文章

python连接oracle并自动发送邮件

文章目录 1 导入所需模块2连接ORACLE3 抽取结果3.1 抽取员工形象3.2 抽取门店形象3.3 抽取明细汇总 4 合并结果5 删除3中的结果6 写入总表6.1 明细汇总总表6.2 大区排名总表6.3 扣款总表 7 自动发送邮件 1 导入所需模块 #用于连接oracle数据库 import cx_Oracle as cx #用操作…

NetSuite .id的用法

我们必须认清一个事实&#xff0c;NetSuite Saved Search是一个被封装化的SQL查询工具。在NetSuite的早期版本中&#xff0c;可以利用Formula字段做很多SQL语句上的灰色应用。但是慢慢的&#xff0c;灰色应用范围被压缩了。目前只剩下一个“.id”的应用了。 今朝我们就谈谈.id…

训练计划安排(练一休一训练分化+倒金字塔训练法)【了解即可,一般人容量不用练一休一,看抖音@孙悟饭桶】

目录 练一休一训练分化每次训练的组数12-15组 &#xff08;4-5个动作&#xff09;QA 倒金字塔训练法倒金字塔热身正式组常见误区&#xff1a; 训练补剂bcaa咖啡因肌酸蛋白粉 如何降低皮质醇水平如何提升睾酮水平文献出处睡眠8h摄入适量脂肪&#xff08;0.8g每公斤体重&#xff…

关于并发编程与线程安全的思考与实践 | 京东云技术团队

作者&#xff1a;京东健康 张娜 一、并发编程的意义与挑战 并发编程的意义是充分的利用处理器的每一个核&#xff0c;以达到最高的处理性能&#xff0c;可以让程序运行的更快。而处理器也为了提高计算速率&#xff0c;作出了一系列优化&#xff0c;比如&#xff1a; 1、硬件…

MySQL优化二索引使用

1、索引分类 类型解释全局索引(FULLTEXT)全局索引&#xff0c;目前只有 MyISAM 引擎支持全局索引&#xff0c;它的出现是为了解决针对文本的模糊查询效率较低的问题&#xff0c;并且只限于 CHAR、VARCHAR 和 TEXT 列哈希索引(HASH)哈希索引是 MySQL 中用到的唯一 key-value 键…

OJ练习第94题——编辑距离

编辑距离 力扣链接&#xff1a;72. 编辑距离 题目描述 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符 删除一个字符 替换一个字符 示例 示例 1&#xff1a; …

vscode 远程开发:免密登入设置

文章目录 1. vscode 安装2. vscode 插件安装&#xff08;1&#xff09; 中文界面设置&#xff08;2&#xff09; ssh远程插件安装 3. 免密登入 1. vscode 安装 vscode 官网下载地址&#xff1a;https://code.visualstudio.com/ 安装很简单&#xff1a; 可以默认方式&#xff0…

gtest之高级主题

目录 Value-Parameterized测试示例Value-Parameterized实现 类型测试Type-Parameterized Tests注册test程序获取当前测试程序名运行测试程序选项选择性测试重复测试无序执行分发到不同的机器控制输出Controlling How Failures Are Reported结合Sanitizer Value-Parameterized测…