Generics mit Spring RESTTemplate
Habe ich eine Klasse so:
public class Wrapper<T> {
private String message;
private T data;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
und ich benutze das resttemplate wie folgt:
...
Wrapper<Model> response = restTemplate.getForObject(URL, Wrapper.class, myMap);
Model model = response.getData();
...
Aber es wirft ein:
ClassCastException
Habe ich gelesen, dass: Problem wenn Sie versuchen, zu verwenden Jackson in java aber nicht helfen. Es gibt einige Themen zu meinem problem etc.: https://jira.springsource.org/browse/SPR-7002 und https://jira.springsource.org/browse/SPR-7023
Irgendwelche Ideen?
PS: Mein Fehler ist, dass:
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to a.b.c.d.Model
Ich denke resttemplate kann nicht verstehen, meine generische variable und vielleicht nimmt es Sie wie ein Objekt statt der generischen T. es wird Also eine LinkedHashMap. Sie können Lesen hier Es sagt, dass bei der Erklärung von dem, was es marshalls:
JSON Type | Java-Typ
Objekt | LinkedHashMap
InformationsquelleAutor der Frage kamaci | 2011-11-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
ParameterizedTypeReference wurde in 3.2 M2 um dieses Problem zu umgehen.
Jedoch die postForObject/getForObject Variante wurde nicht eingeführt.
InformationsquelleAutor der Antwort Manimaran Selvan
Die einzige Sache, die ich denke, Sie tun könnten, ist die Schaffung einer neuen Klasse, die Sie erweitert Wrapper und verwendet Modell als generisches.
Es ist nicht die beste Lösung, aber zumindest werden Sie nicht haben, um unmarshall manuell die Antwort.
InformationsquelleAutor der Antwort Juan Luis
Verwenden Sie keine Generika mit RestTemplate. Wrap request-und response-Objekt mit den wrapper-Objekt, das Sie ausblenden Generika.
InformationsquelleAutor der Antwort Dima
Brauchen Sie nicht auch einen wrapper für diese. Dies versuchen.
InformationsquelleAutor der Antwort Khader M A