Java Jackson核心注解使用详解
作者:Stay Passion
前言
在 Java 后端开发中,Jackson 是最常用的 JSON 序列化/反序列化工具之一。Jackson 提供了一系列功能强大的注解,用于精确控制 JSON 与 Java 对象之间的映射逻辑。本文将深入讲解常用的几个核心注解:
@JsonProperty:指定字段的 JSON 名称@JsonIgnore:忽略字段序列化/反序列化@JsonInclude:控制字段是否参与序列化(如 null、空集合等)@JsonFormat:格式化日期时间@JsonCreator/@JsonValue:自定义对象的序列化/反序列化逻辑
一、@JsonProperty-指定JSON字段名
默认情况下,Jackson 使用 Java 字段名作为 JSON 字段名。但在前后端字段命名不一致时,可以使用 @JsonProperty 显式指定:
public class User {
@JsonProperty("user_name")
private String username;
// getter/setter
}输出 JSON:
{
"user_name": "Tom"
}二、@JsonIgnore-忽略字段
@JsonIgnore 用于在序列化或反序列化过程中跳过某些字段,比如密码、内部字段等:
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;
}当 description 为 null 时不会出现在 JSON 中。
也可以作用于类、字段或全局配置:
@JsonInclude(JsonInclude.Include.NON_EMPTY) private List<String> tags;
四、@JsonFormat-格式化时间
Java 中的日期类型默认序列化为时间戳。通过 @JsonFormat 可以指定格式和时区:
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:构造方法反序列化
当对象没有默认构造器,或你希望控制反序列化逻辑时使用:
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
}七、实战项目结构与代码仓库
示例接口返回序列化结果
@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;
}
}八、总结
Jackson 提供的注解使我们可以精准控制对象与 JSON 的映射行为。合理使用 @JsonProperty、@JsonIgnore、@JsonInclude 等注解,不仅可以满足前后端字段差异需求,还能提升代码的可读性与可维护性。
这些注解在实际开发中广泛应用,是每一位 Java 开发者都应掌握的重要工具。如果你希望构建更强大的 JSON 数据模型控制体系,Jackson 注解体系是你的得力助手。
以上就是Java Jackson核心注解使用详解的详细内容,更多关于Java Jackson核心注解的资料请关注脚本之家其它相关文章!
