Java 是否可以将变量用作@JsonRootName?
我有一个spring项目和类似的类,希望生成根名称为类型的json。以下是一个例子:Java 是否可以将变量用作@JsonRootName?,java,json,spring,serialization,Java,Json,Spring,Serialization,我有一个spring项目和类似的类,希望生成根名称为类型的json。以下是一个例子: public class Person { private String type; //worker private String name; //Dennis private String surname; //Ritchie } 结果应该是: {"worker" : { "name" : "Dennis" , "surname" : "Ritchie" } } 我可以使用
public class Person {
private String type; //worker
private String name; //Dennis
private String surname; //Ritchie
}
结果应该是:
{"worker" : {
"name" : "Dennis" ,
"surname" : "Ritchie"
}
}
我可以使用诸如@JsonRootName之类的Json标记吗?还是应该为worker和extend Person类编写一个类(有3种不同的类型)?当需要将对象序列化为具有不同形式的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();
}
}
有没有办法避免对POJO中的每个字段调用
writeFieldName
?仅仅为了添加一个额外的字段而复制所有内容似乎很愚蠢(更不用说如果POJO发生变化,必须记住在两个地方更新字段)。
@JsonSerialize(using = PersonSerializer.class)
public class Person {
private String type;
private String name;
private String surname;
}