我有一个类似于它的spring项目和类,并希望生成带有根名称的json作为类型。这是一个例子:
public class Person {
private String type; //worker
private String name; //Dennis
private String surname; //Ritchie
}
结果应该是:
{"worker" : {
"name" : "Dennis" ,
"surname" : "Ritchie"
}
}
我可以使用@JsonRootName等Json标签来实现,还是应该为worker编写一个Class并扩展Person类(有3种不同的类型)?
答案 0 :(得分:1)
当您需要将对象序列化为具有不同格式的JSON时,可以实现自定义序列化程序:
public class PersonSerializer extends JsonSerializer<Person> {
@Override
public void serialize(Person person, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeStartObject();
jgen.writeFieldName(person.getType());
jgen.writeStartObject();
jgen.writeFieldName("name", person.getName());
jgen.writeFieldName("surname", person.getSurname());
jgen.writeEndObject();
jgen.writeEndObject();
}
}
之后,您可以在课程中注册序列化程序:
@JsonSerialize(using = PersonSerializer.class)
public class Person {
private String type;
private String name;
private String surname;
}