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);
Sie sollten Ihre eigene Frage mit dem "Update bearbeiten" der Frage beantworten. – hectorg87