2026-10-24 22:23:50
Jackson库通过注解提供了灵活的JSON序列化和反序列化控制机制。以下是核心注解的分类说明及实战案例解析:
一、序列化控制注解@JsonIgnore
作用:标记属性或方法,使其在序列化时被忽略。
示例:@JsonIgnoreprivate String password; // 该字段不会出现在JSON中
@JsonProperty
作用:指定属性在JSON中的名称,或标记方法为属性的访问器。
示例:@JsonProperty("user_name")private String name; // 序列化为"user_name"而非"name"
@JsonGetter
作用:标记方法为属性的序列化访问器,替代直接字段访问。
示例:@JsonGetter("full_name")public String getFullName() { return name + " " + surname;}
@JsonSetter
作用:标记方法为属性的反序列化设置器,指定JSON字段名。
示例:@JsonSetter("user_age")public void setAge(int age) { this.yearsOld = age;}
@JsonIgnoreProperties
作用:忽略JSON中未映射的属性,避免反序列化失败。
示例:@JsonIgnoreProperties(ignoreUnknown = true)public class User { ... } // 忽略JSON中多余的字段
@JsonCreator
作用:指定构造函数或工厂方法用于对象创建,适用于不可变对象。
示例:public class Point { private final int x, y; @JsonCreator public Point(@JsonProperty("x") int x, @JsonProperty("y") int y) { this.x = x; this.y = y; }}
@JsonDeserialize
作用:指定自定义反序列化逻辑(如日期格式转换)。
示例:@JsonDeserialize(using = CustomDateDeserializer.class)private Date birthDate;
关键行为:
序列化:
ObjectMapper mapper = new ObjectMapper();String json = mapper.writeValueAsString(employee);反序列化:
Employee emp = mapper.readValue(json, Employee.class);通过合理组合这些注解,可以精确控制JSON数据的生成与解析过程,适应复杂业务场景的需求。