是否可以将变量用作@JsonRootName?

时间:2016-07-10 14:41:27

标签: 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"
   }
}

我可以使用@JsonRootName等Json标签来实现,还是应该为worker编写一个Class并扩展Person类(有3种不同的类型)?

1 个答案:

答案 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; 
}