RestTemplate getForEntity Karte, um Listen von Objekten
Ich habe eine Antwort von der URL, die wie folgt aussieht:
{"seq":1,"id":"Test1","changes":[{"rev":"1-52f5cdf008ecfbadf621c2939af7bd80"}]}
{"seq":2,"id":"Test2","changes":[{"rev":"1-8ce403a89dc5e7cb4187a16941b3fb7d"}]}
{"seq":3,"id":"Test3","changes":[{"rev":"1-52as7ddfd8ecfbadf621c2939af7bd80"}]}
{"seq":4,"id":"Test4","changes":[{"rev":"1-6yy03a89dc5e7cb45677a16941b3fb7d"}]}
Wenn das zugeordnete Objekt-String, dann immer alle änderungen füttern.
ResponseEntity<String> responseEntity = restTemplate.exchange(URL, HttpMethod.GET, requestEntity, String.class);
In der Erwägung, dass, wenn ich gerade einen benutzerdefinierten Wert ein Objekt, irgendwas wie:
public class KnChanges {
private long seq;
private String id;
private List changes;
mit getter-und setter-Methoden, dann bin ich immer nur der erste doc-details ändern. Auch wenn die KnChanges[] (array) verwendet wird, wird nur die erste änderung ist, erhalten.
Können Sie bitte helfen, wie die JSON-Liste Struktur oben genannten zugeordnet werden können, ein Objekt?
Dank
Harsha
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einige Leute gefragt, für eine bessere Antwort mit einigen Erklärungen. Also hier ist es:
Als sujim erwähnt: Sie müssen
Erklärung:
Den letzten parameter der exchange-Methode aufrufen, definiert die Klasse, die instanziiert wird, wenn die Antwort empfangen wird. Die Antwort, die Daten werden dann zugeordnet, um das resultierende Objekt. Sie müssen also eine
List.class
im Faust. Da erwarten Sie ein JSON-array. Nun müssen Sie definieren den Typ des Inhalts, dassList
. Hier Java type erasure wirft ein paar Steine in den Weg. Als Java entfernt generische Typ-Informationen zur compile-Zeit, kann man nicht einfach definieren das erwarteteList
eineList<KnChanges>.class
. "Zum Glück" gibt es ein hack 😉 Und dieser hack istnew ParameterizedTypeReference<List<KnChanges>>() {}
. Sofern das Objekt die Anwendung ist in der Lage zu Lesen, der generische Typ-Informationen zur Laufzeit. Und daher in der Lage ist zum anzeigen der empfangenen Daten, um Ihre Java-Objekte.Als Randbemerkung: Es gibt mehrere Implementierungen dieser hack. Es wird allgemein verwendet für dependency injection-oder mapper-Systemen, bei denen type erasure kann manchmal ein Problem sein. Auch Googles Guava bietet eine Implementierung. Siehe den code für weitere Informationen. Dort können Sie auch lernen, wie es geht, wenn Sie mögen.