Ich habe meinen Kopf schon eine Weile gegen diesen Punkt geschlagen und immer noch keine Freude. Ich bin neu in Spring und könnte wirklich Hilfe gebrauchen.Spring MVC: Instanz von START_ARRAY-Token kann nicht deserialisiert werden
Ich versuche Spring Boot zu verwenden, um eine Liste von Codes aus einer DB-Tabelle zurückzugeben. Wenn ich rufe meinen REST-Controller von einer URL in einem Browser ...
Beispiel URL: localhost: 8081/cis/UTL/lookupchoice/O/
Es gibt diesen:
[
{"lookupId":10,"choiceGroup":"O.s","choiceCode":null,"displayLabel":"Pending","hidden":false,"displayOrder":1},
{"lookupId":11,"choiceGroup":"O.s","choiceCode":null,"displayLabel":"Active","hidden":false,"displayOrder":2},
{"lookupId":12,"choiceGroup":"O.s","choiceCode":null,"displayLabel":"Archived","hidden":false,"displayOrder":3},
{"lookupId":13,"choiceGroup":"O.s","choiceCode":null,"displayLabel":"Placeholder","hidden":false,"displayOrder":4}
]
Aber ich erhalte eine Fehlermeldung, wenn ich versuche, dies von einem Client-Controller aus auszuführen. Der Aufruf sieht wie folgt aus:
//
//Compiles but does not work
LookupChoice lookupChoice = restTemplate.getForObject(REST_URI+"/utl/lookupchoice/O.s/",
LookupChoice.class);
Der Fehler:verschachtelte Ausnahme ist com.fasterxml.jackson.databind.JsonMappingException: Kann nicht deserialisieren Instanz com.MyPakage.repository.LookupChoice aus START_ARRAY Token
den Fehler Unter der Annahme, tritt auf, weil ein Array anstelle eines einzelnen Objekts zurückgegeben wird, änderte ich den Code dazu:
//
//Does not compile
Iterable<LookupChoice> lookupChoice = restTemplate.getForObject(REST_URI+"/utl/lookupchoice/U.r/",
Iterable<LookupChoice.class>);
Aber jetzt ich ge t ein Fehler in Intellij. Es wird darauf hinweist, dass eine "Expression erwartet" für die Iterable < LookupChoice.class> param, und ich kann nicht in der Vergangenheit diese.
Vielen Dank für Ihre Zeit und Unterstützung, Ed
Vielen Dank für Ihre Antwort. Ich habe mich dafür entschieden und alles scheint jetzt zu funktionieren. Danke für Ihre Hilfe!
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<Object[]> responseEntity;
Object[] lookupChoice;
responseEntity = restTemplate.getForEntity(REST_SERVICE_URI+"/utl/lookupchoice/O.s/" , Object[].class);
lookupChoice = responseEntity.getBody();
model.addAttribute("Status", lookupChoice);
Über die oben genannten, gibt es irgendwelche Verbesserungen, die dies eleganter machen, und/oder Leistung usw. verbessern? – eLowe