Die Instanz des Objekts aus dem START_ARRAY-Token kann im Spring 3-REST-Webdienst nicht deserialisiert werden
Bin ich das auch cool, was der Frühling bietet: Frühling RESTWebService (Version Frühling ist 3). Wenn ich auf die URL aus dem browser sehe ich die JSON-Antwort, aber von einem Client-endpoint (Android-Anwendung) iIreceive diese Fehlermeldung:
Caused by: org.springframework.web.client.ResourceAccessException:
I/O error: Can not deserialize instance of MyObject out of START_ARRAY token
at [Source: org.apache.http.conn.EofSensorInputStream@4076e940; line: 1,
column: 1]; nested exception is org.codehaus.jackson.map.JsonMappingException:
Can not deserialize instance of MyObject out of START_ARRAY token
at [Source: org.apache.http.conn.EofSensorInputStream@4076e940; line: 1, column: 1]
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:466)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:414)
at org.springframework.web.client.RestTemplate.getForEntity(RestTemplate.java:234)
at com.be.android.locateconsultants.resources.AsyncTaskRESTServiceCaller.doInBackground(AsyncTaskRESTServiceCaller.java:43)
at com.be.android.locateconsultants.resources.AsyncTaskRESTServiceCaller.doInBackground(AsyncTaskRESTServiceCaller.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:252)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
... 4 more
Caused by: org.codehaus.jackson.map.JsonMappingException: Can not deserialize
instance of MyObject out of START_ARRAY token
at [Source: org.apache.http.conn.EofSensorInputStream@4076e940; line: 1, column: 1]
at org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:198)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeUsingCreator(BeanDeserializer.java:565)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:365)
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2395)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1655)
at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.readInternal(MappingJacksonHttpMessageConverter.java:135)
at org.springframework.http.converter.AbstractHttpMessageConverter.read(AbstractHttpMessageConverter.java:154)
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:74)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:632)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:618)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:459)
... 10 more
MyObject Struktur ist die gleiche wie die von der server-Seite der Anwendung.
Ich habe versucht, die Anfrage den server wie diesem:
final String url = ".....";
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<Consultant> responseEntity = restTemplate.getForEntity(
url, Consultant.class);
Oder so:
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<String>(headers);
ResponseEntity<MyObject> response = restTemplate
.exchange("....",HttpMethod.GET, entity, MyObject.class);
System.out.println("RESPONSE: " + response.getBody());
Aber immer noch der gleiche Fehler wie oben.
Kann nicht herausfinden, was fehlt mir an dieser Stelle, eine Idee oder Hinweise wäre toll.
Danke.
InformationsquelleAutor der Frage Gabriela Radu | 2012-05-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lösung in einer ähnlichen situation war, um anzeigen zu
Consultant[].class
Dies gilt, wenn Sie versuchen, zu Deserialisieren ein JSON-array mit den zugeordneten Objekten.
InformationsquelleAutor der Antwort Ahto Luuri
Sollten Sie die Karte an
List<Consultant>
anstatt zuConsultant.class
.InformationsquelleAutor der Antwort pawelzieba
Dies ist im Zusammenhang mit Jackson und die Art und Weise Sie versucht sind, zu Deserialisieren und initialisieren Sie einen container von einem array.
Während meiner Nutzung der Kontext ist ein wenig anders, dies kann helfen, einige, die sich hier aus der Suche nach Jackson-spezifische deserialisierungsfehler.
Musste ich es so machen:
InformationsquelleAutor der Antwort NathanChristie
einer Datei foo.json enthält einen Stapel von Daten wie diese:
Die nachfolgende Erklärung gibt Ihnen eine ArrayList mit LinkedHashMap, wo A, B, C, D sind die Schlüssel.
InformationsquelleAutor der Antwort Tiina