Jackson库中@JsonAlias和@JsonProperty的使用和区别
@JsonAlias
用于指定 JSON 字段的别名。这意味着当从 JSON 反序列化到 Java 对象时,除了默认字段名称外,还可以识别指定的别名。
@JsonProperty
这个注解告诉 Jackson 在进行 JSON 序列化和反序列化时,将 JSON 中的 xxx 字段映射到 Java 类中的某个字段。
例子:
public class Student {
// 使用@JsonProperty注解,将JSON中的"student_full_name"字段映射到该字段
@JsonProperty("student_full_name")
private String fullName;
// 使用@JsonAlias注解,为该字段添加别名"name"和"student_name"
@JsonAlias({"name", "student_name"})
private String anotherFullName;
}
{
"student_full_name": "Tom Lee",
"student_name": "Peter Chen",
"name": "Lucy Wang"
}
输出:
fullName
字段的值会是"Tom Lee"
,因为@JsonProperty("student_full_name")
明确指定了映射关系,JSON 中的student_full_name
键对应的值"Tom Lee"
就会被赋给fullName
字段。
anotherFullName
字段的值会是"Lucy Wang"
,由于@JsonAlias({"name", "student_name"})
注解存在,且多个别名都出现时取第一个匹配到的别名对应的值,在解析顺序上先匹配到name
这个别名,其对应的值"Lucy Wang"
就会被赋给anotherFullName
字段。
区别:
@JsonAlias为别名,说明原名称依然可以映射,同时别名也可以,相当于一对多,而@JsonProperty则单纯代表一对一映射关系。
注意@JsonAlias别名都出现的情况下,会匹配第一个值。