Frühjahr RestTemplate und generische Typen ParameterizedTypeReference Sammlungen wie List<T>
Einer Abstrakten controller-Klasse erfordert eine Liste von Objekten vom REST. Während mit Spring RestTemplate ist nicht seine Zuordnung zu Klasse erforderlich stattdessen gibt es zurück Verbunden HashMAp
public List<T> restFindAll() {
RestTemplate restTemplate = RestClient.build().restTemplate();
ParameterizedTypeReference<List<T>> parameterizedTypeReference = new ParameterizedTypeReference<List<T>>(){};
String uri= BASE_URI +"/"+ getPath();
ResponseEntity<List<T>> exchange = restTemplate.exchange(uri, HttpMethod.GET, null,parameterizedTypeReference);
List<T> entities = exchange.getBody();
//here entities are List<LinkedHashMap>
return entities;
}
Wenn ich,
ParameterizedTypeReference<List<AttributeInfo>> parameterizedTypeReference =
new ParameterizedTypeReference<List<AttributeInfo>>(){};
ResponseEntity<List<AttributeInfo>> exchange =
restTemplate.exchange(uri, HttpMethod.GET, null,parameterizedTypeReference);
Funktioniert es einwandfrei. Aber können nicht in allen Unterklassen, jede andere Lösung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe gearbeitet um dieses mit der folgenden generischen Methode:
Dann könnte ich rufen:
Diese haben Last meiner Anrufer mit, dass Sie angeben, die
ParameterizedTypeReference
beim aufrufen, aber bedeutete, dass ich nicht haben, um zu halten ein statisches mapping von Typen wie in vels4j AntwortKonnte nicht finden, eine Lösung von Frühling, deshalb habe ich es getan mit
ParameterizedTypeReference
imHashMap
wieund verwendet es
Mit
ParameterizedTypeReference
für eineList<Domain>
, wenn Domäne ist eine explizite Klasse, dassParameterizedTypeReference
gut funktioniert, wie hier:Jedoch, wenn eine Methode
listAll
verwendet in generic Geschmack, diese Liste sollte parametrisierte selbst. Der beste Weg den ich gefunden ist:Die einfachste Lösung für mich ist, um ein Objekt definieren MyOperationResult mit der Liste, die Sie erwarten, als Feld-und verwenden Sie restTemplate.getForObject um dieses Ergebnis zu erzielen.