想象一下,我有两个这样的课程。
class person{
String name;
Int age;
Address address;
}
class Address{
String city;
String country;
}
当一个Person对象被序列化时,我想这样看。即展平地址字段。
{
name: "John",
age: 25,
city: "London",
country: "United Kingdom"
}
是否有任何注释(杰克逊)或其他解决方法可以实现我的目标?
答案 0 :(得分:3)
(1)基于Jackson的快速解决方案是@JsonUnwrapped
批注。但是请注意,它具有here中所述的某些限制。
@JsonAutoDetect(fieldVisibility=Visibility.ANY)
class Person {
String name;
Int age;
@JsonUnwrapped
Address address;
}
(2)第二种方法是对Person类使用自定义序列化程序(使用Jackson)。与(1)相比,更加灵活和可自定义:
@JsonSerialize(using = PersonSerializer.class)
class Person {
...
}
public class PersonSerializer extends StdSerializer<Person> {
@Override
public void serialize(Person person, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeStartObject();
jgen.writeStringField("name", person.getName());
jgen.writeNumberField("age", person.getAge());
jgen.writeStringField("city", person.getAddress().getCity());
jgen.writeStringField("country", person.getAddress().getCountry());
jgen.writeEndObject();
}
}
(3)其他解决方案可能基于gson,但也可以使用自定义适配器:
@JsonAdapter(PersonAdapter.class)
class Person {
...
}
public class PersonAdapter extends TypeAdapter<Person> {
...
}