2013-01-23 7 views
6

Sto utilizzando RestTemplate e ho problemi di deserializzazione di un oggetto. Ecco cosa sto facendo. La risposta JSON sembra,Deserializzazione di oggetti nidificati utilizzando RestTemplate

{ 
"response": { 
"Time": "Wed 2013.01.23 at 03:35:25 PM UTC", 
"Total_Input_Records": 5, 
},- 
"message": "Succeeded", 
"code": "200" 
} 

trasformato questa payload JSON in un POJO utilizzando jsonschema2pojo

public class MyClass { 
    @JsonProperty("response") 
    private Response response; 
    @JsonProperty("message") 
    private Object message; 
    @JsonProperty("code") 
    private Object code; 
    private Map<String, Object> additionalProperties = new HashMap<String, Object>(); 
    //bunch of getters and setters here 
} 
public class Response { 
    @JsonProperty("Time") 
    private Date Time; 
    @JsonProperty("Total_Input_Records") 
    private Object Total_Input_Records; 
    private Map<String, Object> additionalProperties = new HashMap<String, Object>(); 
//bunch of getters and setters here 
} 

Ecco l'elaborazione della richiesta in cui io sono sempre l'eccezione,

String url = "http://my.site.com/someparams"; 
RestTemplate template = new RestTemplate(
       new HttpComponentsClientHttpRequestFactory()); 
FormHttpMessageConverter converter = new FormHttpMessageConverter(); 
List<MediaType> mediaTypes = new ArrayList<MediaType>(); 
mediaTypes.add(new MediaType("application", "x-www-form-urlencoded")); 
converter.setSupportedMediaTypes(mediaTypes); 
template.getMessageConverters().add(converter); 
MyClass upload = template.postForObject(url, null, MyClass.class); 

Ecco la parte frustrante, l'eccezione (deliberatamente tagliata, non piena). Qualcosa che mi manca?

org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Unrecognized field "Time" (Class com.temp.pointtests.Response), not marked as ignorable 
at [Source: [email protected]; line: 1, column: 22 (through reference chain: com.temp.pointtests.MyClass["response"]->com.temp.pointtests.Response["Time"]);] 

+++++ aggiornamento Risolto ++++++

vidi Primavera aggiunto MappingJackson2HttpMessageConverter che utilizza Jackson 2. Poiché MappingJacksonHttpMessageConverter nel mio codice precedente utilizza versioni Jackson Pre2.0 e non funziona. Funziona per Jackson 2.0 comunque. Con MappingJackson2HttpMessageConverter disponibile ora, ora posso aggiungerlo al mio RestTemplate e tutto funziona perfettamente :-). Ecco il codice per le persone che hanno lo stesso problema,

String url = "http://mysite.com/someparams"; 
RestTemplate template = new RestTemplate(); 
HttpHeaders headers = new HttpHeaders(); 
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); 
HttpEntity request = new HttpEntity(headers); 
List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>(); 
MappingJackson2HttpMessageConverter map = new MappingJackson2HttpMessageConverter(); 
messageConverters.add(map); 
messageConverters.add(new FormHttpMessageConverter()); 
template.setMessageConverters(messageConverters); 
MyClass msg = template.postForObject(url, request, MyClass.class); 
+0

dovresti rispondere alla tua stessa domanda con "Modifica aggiornamento" della domanda. – hectorg87

risposta

0

Utilizzare la @JsonSerialize (utilizzando = JsonDateSerializer.class) o @JsonDeserialize (utilizzando = JsonDateDeSerializer.class) annotazioni di org.codehaus.jackson.map. JsonDeserializer; risolverà il problema o l'utente ObjectMapper (org.codehaus.jackson.map.ObjectMapper) da convertire in Json String.

objectMapper.writeValueAsString (Object); // questo darà una stringa json