文章目录
- 一、介绍
- 二、@JsonProperty
- 三、@JsonIgnore
- 四、@JsonInclude
- 五、@JsonFormat
- [六、@JsonCreator 和 @JsonProperty (在构造函数中)](#六、@JsonCreator 和 @JsonProperty (在构造函数中))
- [七、@JsonTypeName 和 @JsonTypeInfo](#七、@JsonTypeName 和 @JsonTypeInfo)
- 八、@JsonIgnoreProperties
- 九、@JsonSerialize
- 十、@JsonDeserialize
一、介绍
jackson-annotations 是 Jackson 库的一部分,它提供了一系列注解,用于控制 Java 对象与 JSON 之间的序列化和反序列化过程。
二、@JsonProperty
用于指定 Java 类的属性名与 JSON 中的字段名之间的映射关系。
public class User {
@JsonProperty("user_name")
private String name;
// getters and setters
}
在上面的例子中,Java 对象的 name 属性将被序列化为 JSON 字段 user_name。
三、@JsonIgnore
用于指定某个 Java 类的属性在序列化为 JSON 时被忽略。
public class User {
private String name;
@JsonIgnore
private String password;
// getters and setters
}
在上面的例子中,password 属性在序列化为 JSON 时将被忽略。
四、@JsonInclude
用于指定在序列化时哪些值应该被包含。例如,可以使用 @JsonInclude(Include.NON_NULL) 来只包含非空值。
@JsonInclude(Include.NON_NULL)
public class User {
private String name;
private String email;
// getters and setters
}
在上面的例子中,如果 email 为 null,则不会被包含在序列化的 JSON 中。
五、@JsonFormat
用于自定义日期和时间的格式。
public class Event {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private Date eventDate;
// getters and setters
}
在上面的例子中,eventDate 属性将按照指定的日期时间格式进行序列化和反序列化。
六、@JsonCreator 和 @JsonProperty (在构造函数中)
用于自定义反序列化时的构造函数。
public class User {
private String name;
private int age;
@JsonCreator
public User(@JsonProperty("user_name") String name, @JsonProperty("user_age") int age) {
this.name = name;
this.age = age;
}
// getters and setters
}
在上面的例子中,我们使用了一个带有 @JsonCreator 注解的构造函数,并使用 @JsonProperty 注解来指定 JSON 字段与 Java 构造函数参数之间的映射关系。
七、@JsonTypeName 和 @JsonTypeInfo
用于处理多态类型。
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonTypeName("employee")
public class Employee {
// ...
}
public class Manager extends Employee {
// ...
}
在上面的例子中,Employee 和 Manager 类都可以被序列化为 JSON,并且包含一个 type 字段来指示对象的实际类型。反序列化时,可以根据这个 type 字段来创建正确的对象实例。
八、@JsonIgnoreProperties
- 作用:在序列化或反序列化时忽略Java Bean中的某些属性。
- 示例:@JsonIgnoreProperties({"propertyName1", "propertyName2"})
- 注意:这是一个类注解,可以指定多个要忽略的属性名。
九、@JsonSerialize
- 作用:用于自定义属性的序列化方式。
- 示例:配合自定义的序列化器使用,如@JsonSerialize(using = CustomSerializer.class)
- 注意:可以作用于属性或getter方法上。
十、@JsonDeserialize
- 作用:用于自定义属性的反序列化方式。
- 示例:配合自定义的反序列化器使用,如@JsonDeserialize(using = CustomDeserializer.class)
- 注意:可以作用于属性或setter方法上。