2016-07-10 14 views
2

Ich habe ein Spring-Projekt und eine Klasse wie diese und möchte Json mit Root-Namen als Typ produzieren. Hier ein Beispiel:Ist es möglich, Variable als @JsonRootName zu verwenden?

public class Person { 
    private String type; //worker 
    private String name; //Dennis 
    private String surname; //Ritchie 
} 

Ergebnis sein sollte:

{"worker" : { 
    "name" : "Dennis" , 
    "surname" : "Ritchie" 
    } 
} 

Kann ich es mit Json Tags wie @JsonRootName tun oder sollte ich eine Klasse für Arbeiter schreiben und Person-Klasse erweitern (Es gibt 3 verschiedene Arten)?

Antwort

1

Sie können einen benutzerdefinierten Serializer implementieren, wenn Sie ein Objekt in ein JSON mit einer anderen Form serialisiert werden müssen:

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(); 
    } 
} 

Danach werden Sie den Serializer auf der Klasse registrieren:

@JsonSerialize(using = PersonSerializer.class) 
public class Person { 
    private String type; 
    private String name; 
    private String surname; 
} 
+0

Gibt es eine Möglichkeit, 'writeFieldName' für jedes einzelne Feld im POJO zu vermeiden? Es scheint albern zu sein, alles einfach kopieren zu müssen, nur um ein einzelnes zusätzliches Feld hinzuzufügen (ganz zu schweigen davon, dass man sich daran erinnern muss, Felder an zwei Stellen zu aktualisieren, sollte sich der POJO ändern). – HEATH3N

Verwandte Themen