Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot deserialize instance of object out of START_ARRAY token in Spring 3 REST Webservice

Tags:

I am making use of this cool thing Spring offers: Spring RESTWebService (Version of spring is 3). If I access the URL from browser I can see the JSON response, but from a Client endpoint (Android application) iIreceive this error message:

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 structure is the same as the one from the server side application.

I have tried to request the server like this:

final String url = "....."; RestTemplate restTemplate = new RestTemplate(); ResponseEntity<Consultant> responseEntity = restTemplate.getForEntity(             url, Consultant.class); 

Or like this:

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()); 

But still the same error as above. Can't figure out what I am missing at this point, any idea or hints would be great. Thank you.

like image 499
Gabriela Radu Avatar asked May 23 '12 12:05

Gabriela Radu


2 Answers

You should map it to List<Consultant> rather than to Consultant.class.

like image 197
pawelzieba Avatar answered Sep 29 '22 11:09

pawelzieba


Solution in a similar situation was to map to Consultant[].class This applies if you try to deserialize a JSON array of your mapped objects.

like image 28
Ahto Luuri Avatar answered Sep 29 '22 11:09

Ahto Luuri