2016-07-22 15 views
0

Ich deserialisiere eine JSON-HTTP-Antwort und lese sie in ein Java-Objekt.Kann ich es vermeiden, den JSON Jackson-HTTP-Antworttext zweimal zu deserialisieren, wenn ich READ_UNKNOWN_ENUM_VALUES_AS_NULL festlegen möchte?

Meine erste Lösung war:

javax.ws.rs.core.Response response = ... 
MyClass obj = response.readEntity(MyClass.class); 

I unbekannt ENUM-Werte von Enum-Mitglieder in MyClass als null und nicht werfen eine Ausnahme lesen möchten, so geändert ich die oben:

String str = response.readEntity(String.class); 
ObjectMapper mapper = new ObjectMapper(); 
mapper.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true); 
MyClass obj = mapper.readValue(string, Class<MyClass>); 

Weiß jemand, wie ich die doppelte Deserialisierung hier vermeiden könnte, anstatt Antwort -> String -> Klasse, einfach Response -> Class?

Antwort

0

So ist die Lösung dieses Problems ist ein ObjectMapperContextResolver mit dem Kunden

private final ObjectMapperContextResolver OBJECT_MAPPER_CONTEXT_RESOLVER = new ObjectMapperContextResolver(); 

javax.ws.rs.client.Client client = ... 
javax.ws.rs.client.WebTarget target = client.target("..."); 
client.register(OBJECT_MAPPER_CONTEXT_RESOLVER).target("..."); 

javax.ws.rs.core.Response response = target.path("...").request(MediaType.APPLICATION_JSON).get(); 
MyClass obj = response.readEntity(MyClass.class); 
registrieren