📅  最后修改于: 2023-12-03 15:31:27.830000             🧑  作者: Mango
Jackson是一个快速、具有简单API和强大的数据绑定功能的Java库,常用于JSON和XML的序列化和反序列化。其中,Jackson注释(Jackson Annotations)是一种自定义Jackson序列化和反序列化的方式,开发者可以使用注释来自定义JSON或XML的输出或输入格式。
以下是常用的Jackson注释:
用于指定JSON中的属性名称,作用类似于Java中的属性字段名,但JSON中的属性名需要遵循camelCase命名规范,而Java中的属性名一般采用驼峰命名规范。@JsonProperty注释可以指定JSON中属性的名称,例如:
public class User {
@JsonProperty("user_id")
private int userId;
private String name;
private String email;
// getter和setter方法省略
}
当Java对象序列化为JSON时,会将userId属性的值序列化为"user_id",而不是"userId"。
用于指定某些属性在序列化或反序列化时忽略,例如:
public class User {
private int userId;
private String name;
@JsonIgnore
private String password;
// getter和setter方法省略
}
当Java对象序列化为JSON时,将不会包含password属性的值。
用于指定某个属性在序列化或反序列化时的格式,例如:
public class Event {
private String name;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'", timezone = "UTC")
private Date eventTime;
// getter和setter方法省略
}
在这个例子中,eventTime属性将以"yyyy-MM-dd'T'HH:mm:ss'Z'"格式序列化为字符串,例如"2019-12-31T23:59:59Z"。
用于控制某些属性在序列化时是否输出,默认情况下,属性值为null或空字符串时不会输出,而使用@JsonInclude注释可以控制是否输出,例如:
public class User {
private int userId;
private String name;
@JsonInclude(JsonInclude.Include.ALWAYS)
private String email;
// getter和setter方法省略
}
在这个例子中,将始终输出email属性的值,即使它的值为null或空字符串。
用于在多态类型中指定类型标识符,例如:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = Circle.class, name = "circle"),
@JsonSubTypes.Type(value = Rectangle.class, name = "rectangle") })
public abstract class Shape {
// 可以包含公共的属性和方法
}
在这个例子中,@JsonTypeInfo注释指定了类型标识符使用"name"方式传递,且在JSON属性中使用"type"属性名,@JsonSubTypes注释指定了可能的子类类型及其名称。