Wie Deserialisieren JSON-Array?
Ich bin mit Jackson in CXF zum serialisieren/Deserialisieren von Daten. Leider bin ich Schwierigkeiten beim konfigurieren von CXF/Jackson Deserialisieren zu einem JSON-array. Ich würde schätzen, Hilfe bei der Lösung des Problems.
Bis zu diesem Zeitpunkt die meisten der json-Daten im Objekt-format, d.h.
{ "objectCollection": [ {...}, {...}, {...}... ] }
Jedoch, die json-Daten in Frage ist von der form:
[ {...}, {...}, {...} ]
Den web-service-Endpunkt erwartet ein "GroupsDto" - Objekt (siehe Folgendes)
das hat eine einzige Eigenschaft, -- eine Sammlung von Gruppen, die
bei der übertragung über das JSON-array.
@PATH(...)
public Response createGroups(GroupsDto groups) {
...
}
Fügte ich @JsonDeserialize wie folgt vor, um die GroupsDto collection-Eigenschaft, aber es funktioniert NICHT. Ich weiter: "Kann nicht deserialisiert Instanz GroupsDto aus START_ARRAY token"
public class GroupsDto {
private Collection<GroupDto> groups;
/**
* @return the groups
*/
@XmlElement(name="group")
@JsonDeserialize(contentAs=GroupDto.class)
public Collection<GroupDto> getGroups() {
return groups;
}
...
}
- Prüfen Sie diese Frage [Jackson - Lesen ein JSON-array mit Robospice mit loadDataFromNetwork () - Methode][1] [1]: stackoverflow.com/questions/18792702/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn die json-Daten ist von der form:
Bekam Sie zu nutzen, fügen Sie einer anderen Klasse sagen, 'wrapper':
Und verwenden Sie diese Klasse, während deserailizing. Dieser Ansatz funktioniert für mich.
Brauchen Sie nur anzugeben, die
@JsonDeserialize(contentAs=GroupDto.class)
in Ihrem setter. Serialisierung ist immer auf bekommen desserialization ist immer auf set, oder wenn Sie bevorzugen, können Sie angeben, sowohl auf dem Feld.Dokumentation für Serialisieren und Deserialisieren
Code-Beispiel:
@JsonDeserialize
annotation. Die EigenschaftcontentAs
ist, um anzuzeigen, dass dies eine Sammlung und deserialisiert werden alsModelClass
. Wenn Sie möchten, könnten Sie ändern den Namen der Eigenschaft auslist
um etwas anderes. Der name spielt keine Rolle, was zählt, ist die Beschriftung.{"list": [...]}
, die die Taste 'Liste', aber was, wenn es keine key (name), D. H.[...]
?readValues
stattreadValue
ObjectMapper
; folglich kann ich nicht einfach an eineTypeReference
um eine benutzerdefinierteObjectMapper
ich darauf angewiesen, die vorgegebenenObjectMapper
und Anmerkungen.