@JsonValue 只序列化单个字段或单个方法返回值(不是整个对象)
@JsonValue
只序列化单个字段或单个方法(无参、返回非void)的返回值,而不是收集对象的所有属性。value 通常是简单标量类型(String或Number),但它可以是任何可序列化的类型(比如 Collection、Map或Bean)。 一个类中最多只能有一个 @JsonValue
注解。
一个典型的用法是注解 toString()
方法,使返回的 String 值用作 JSON 序列化;如果需要反序列化,则使用 @JsonCreator
注解的构造函数或工厂方法。
用在方法上
POJO
public class Person {
private String name;
private int age;
...
@JsonValue
public String toPersonInfo() {
return name + " - " + age;
}
...
}
序列化
public class ExampleMain {
public static void main(String[] args) throws IOException {
Person person = new Person("Jessie", 35);
System.out.println("-- before serialization --");
System.out.println(person);
ObjectMapper om = new ObjectMapper();
String jsonString = om.writeValueAsString(person);
System.out.println("-- after serialization --");
System.out.println(jsonString);
}
}
-- before serialization --
Person{name='Jessie', age=35}
-- after serialization --
"Jessie - 35"
用在字段上
public class Person2 {
private String name;
private int age;
@JsonValue
private String personInfo;
...
}
public class ExampleMain2 {
public static void main(String[] args) throws IOException {
Person2 person = new Person2("Jessie", 35);
System.out.println("-- before serialization --");
System.out.println(person);
ObjectMapper om = new ObjectMapper();
String jsonString = om.writeValueAsString(person);
System.out.println("-- after serialization --");
System.out.println(jsonString);
}
}
-- before serialization --
Person{name='Jessie', age=35}
-- after serialization --
"Jessie - 35"
原文链接
Jackson JSON - Using @JsonValue to serialize a single value returned by a method or field