Jackson库中注解如何控制JSON序列化和反序列化?

兄弟帮我问一下,Jackson库中注解如何控制JSON序列化和反序列化?
最新回答
长野初见

2026-10-24 22:23:50

Jackson库通过注解提供了灵活的JSON序列化和反序列化控制机制。以下是核心注解的分类说明及实战案例解析:

一、序列化控制注解
  1. @JsonIgnore

    作用:标记属性或方法,使其在序列化时被忽略。

    示例:@JsonIgnoreprivate String password; // 该字段不会出现在JSON中

  2. @JsonProperty

    作用:指定属性在JSON中的名称,或标记方法为属性的访问器。

    示例:@JsonProperty("user_name")private String name; // 序列化为"user_name"而非"name"

  3. @JsonGetter

    作用:标记方法为属性的序列化访问器,替代直接字段访问。

    示例:@JsonGetter("full_name")public String getFullName() { return name + " " + surname;}

  4. @JsonSetter

    作用:标记方法为属性的反序列化设置器,指定JSON字段名。

    示例:@JsonSetter("user_age")public void setAge(int age) { this.yearsOld = age;}

二、反序列化控制注解
  1. @JsonIgnoreProperties

    作用:忽略JSON中未映射的属性,避免反序列化失败。

    示例:@JsonIgnoreProperties(ignoreUnknown = true)public class User { ... } // 忽略JSON中多余的字段

  2. @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; }}

  3. @JsonDeserialize

    作用:指定自定义反序列化逻辑(如日期格式转换)。

    示例:@JsonDeserialize(using = CustomDateDeserializer.class)private Date birthDate;

三、实战案例解析@JsonIgnoreProperties(ignoreUnknown = true)public class Employee { private String id; @JsonProperty("employee_name") private String name; @JsonGetter("annual_salary") public int getSalary() { return salary * 12; } @JsonSetter("work_experience") public void setExperience(int years) { this.experience = years; } @JsonDeserialize(using = CustomBooleanDeserializer.class) private boolean isActive;}

关键行为:

  • 序列化时:name字段输出为employee_name,getSalary()结果输出为annual_salary。
  • 反序列化时:接受work_experience字段映射到experience属性,忽略JSON中未定义的字段,使用自定义逻辑处理isActive字段。
四、使用流程
  1. 序列化:

    ObjectMapper mapper = new ObjectMapper();String json = mapper.writeValueAsString(employee);
  2. 反序列化:

    Employee emp = mapper.readValue(json, Employee.class);
五、高级技巧
  • 混合注解:结合@JsonInclude(Include.NON_NULL)过滤空值字段。
  • 多态处理:使用@JsonTypeInfo和@JsonSubTypes处理继承关系。
  • 视图控制:通过@JsonView实现字段级别的动态过滤。

通过合理组合这些注解,可以精确控制JSON数据的生成与解析过程,适应复杂业务场景的需求。