2013-01-23 8 views
6

Ich benutze RestTemplate und Probleme mit der Deserialisierung eines Objekts. Hier ist was ich mache. Die JSON-Antwort aussieht,Deserialisieren verschachtelter Objekte mit RestTemplate

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

diese Json Nutzlast in eine POJO Converted jsonschema2pojo mit

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 
} 

Hier wird die Anfrageverarbeitung ist, wo ich die Ausnahme bin immer,

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

Hier der frustrierende Teil, Ausnahme (absichtlich getrimmt, nicht voll). Alles was mir fehlt?

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"]);] 

+++++ Update behoben ++++++

Ich sah Frühling MappingJackson2HttpMessageConverter hinzugefügt, die Jackson verwendet 2. Da MappingJacksonHttpMessageConverter oben in meinem Code verwendet Jackson Pre2.0 Versionen und es funktioniert nicht. Es funktioniert jedoch für Jackson 2.0. Mit MappingJackson2HttpMessageConverter jetzt verfügbar, kann ich es jetzt zu meiner RestTemplate hinzufügen und alles funktioniert gut :-). Hier ist der Code für Menschen, die das gleiche Problem haben,

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

Sie sollten Ihre eigene Frage mit dem "Update bearbeiten" der Frage beantworten. – hectorg87

Antwort

0

Verwenden Sie die @JsonSerialize (mit = JsonDateSerializer.class) oder @JsonDeserialize (mit = JsonDateDeSerializer.class) Anmerkungen von org.codehaus.jackson.map. JsonDeserializer; Es löst das Problem oder den Benutzer ObjectMapper (org.codehaus.jackson.map.ObjectMapper) in Json String zu konvertieren.

objectMapper.writeValueAsString (Objekt); // Dies wird geben JSON String

Verwandte Themen