Deserialisieren verschachtelter Objekte mithilfe von RestTemplate
Posted: 16 Jan 2025, 12:03
Ich verwende RestTemplate und habe Probleme beim Deserialisieren eines Objekts. Folgendes mache ich. Die JSON-Antwort sieht so aus:
Diese Json-Nutzlast wurde mit jsonschema2pojo in ein POJO konvertiert
Hier ist die Anforderungsverarbeitung, bei der ich die Ausnahme erhalte
Hier ist der frustrierende Teil, die Ausnahme (absichtlich gekürzt, nicht vollständig). Fehlt mir etwas?
+++++Update gelöst++++++
Ich habe gesehen, dass Spring MappingJackson2HttpMessageConverter hinzugefügt hat, der Jackson 2 verwendet. Weil MappingJacksonHttpMessageConverter in meinem Der obige Code verwendet Jackson Pre2.0-Versionen und funktioniert nicht. Es funktioniert jedoch für Jackson 2.0. Da MappingJackson2HttpMessageConverter jetzt verfügbar ist, kann ich ihn jetzt zu meinem RestTemplate hinzufügen und alles funktioniert einwandfrei
. Hier ist der Code für Personen, die das gleiche Problem haben:
Code: Select all
{
"response": {
"Time": "Wed 2013.01.23 at 03:35:25 PM UTC",
"Total_Input_Records": 5,
},-
"message": "Succeeded",
"code": "200"
}
Code: Select all
public class MyClass {
@JsonProperty("response")
private Response response;
@JsonProperty("message")
private Object message;
@JsonProperty("code")
private Object code;
private Map additionalProperties = new HashMap();
//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 additionalProperties = new HashMap();
//bunch of getters and setters here
}
Code: Select all
String url = "http://example.com/someparams";
RestTemplate template = new RestTemplate(
new HttpComponentsClientHttpRequestFactory());
FormHttpMessageConverter converter = new FormHttpMessageConverter();
List mediaTypes = new ArrayList();
mediaTypes.add(new MediaType("application", "x-www-form-urlencoded"));
converter.setSupportedMediaTypes(mediaTypes);
template.getMessageConverters().add(converter);
MyClass upload = template.postForObject(url, null, MyClass.class);
Code: Select all
org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Unrecognized field "Time" (Class com.temp.pointtests.Response), not marked as ignorable
at [Source: org.apache.http.conn.EofSensorInputStream@340ae1cf; line: 1, column: 22 (through reference chain: com.temp.pointtests.MyClass["response"]->com.temp.pointtests.Response["Time"]);]
Ich habe gesehen, dass Spring MappingJackson2HttpMessageConverter hinzugefügt hat, der Jackson 2 verwendet. Weil MappingJacksonHttpMessageConverter in meinem Der obige Code verwendet Jackson Pre2.0-Versionen und funktioniert nicht. Es funktioniert jedoch für Jackson 2.0. Da MappingJackson2HttpMessageConverter jetzt verfügbar ist, kann ich ihn jetzt zu meinem RestTemplate hinzufügen und alles funktioniert einwandfrei

Code: Select all
String url = "http://example.com/someparams";
RestTemplate template = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
HttpEntity request = new HttpEntity(headers);
List>();
MappingJackson2HttpMessageConverter map = new MappingJackson2HttpMessageConverter();
messageConverters.add(map);
messageConverters.add(new FormHttpMessageConverter());
template.setMessageConverters(messageConverters);
MyClass msg = template.postForObject(url, request, MyClass.class);