2017-04-26 3 views
0

Ich habe eine Java-API (Rest), die eine JSON als Körperanforderung akzeptiert. Ich muss den Körper einer Java-Klasse zuordnen, aber eines der JSON-Attribute ist ein JSON selbst, und ich kann seine Struktur nicht vorhersagen.POST-JSON mit JSON-Attribut zu Java-API-Rest

Zum Beispiel ist dies die Ressource:

@POST 
public void paymentInfo(PaymentInfoEntity paymentInfoEntity) 
throws JsonGenerationException, JsonMappingException, IOException { 
    ... 
} 

Dies ist ein JSON Beispiel:

{ 
    progressive: 123, 
    params: { [another valid JSON node] } 
} 

Dies ist, wie ich das Unternehmen möchte:

public class PaymentInfoEntity { 
    public Integer progressive; 
    public JsonNode params; 
} 

Mit Diese Konfiguration habe ich diesen Fehler:

org.codehaus.jackson.map.JsonMappingException: Can not construct instance of com.fasterxml.jackson.databind.JsonNode, problem: abstract types can only be instantiated with additional type information

Derselbe Fehler tritt auf, wenn ich BaseJsonNode params anstelle von JsonNode params deklariere.

Wenn ich stattdessen eine Object params deklariere, funktioniert es. Wie kann ich dann einen JSON daraus parsen? In diesem Fall ist params.toString() das Formular {key1=stringvalue1, key2=stringvalue2} anstelle von {key1: "stringvalue1", key2: "stringvalue2"}.

Welches ist die beste Option, um mein Ziel zu erreichen? Vielen Dank!

Antwort

0

JsonNode ist ein abstrakter Typ. Versuchen Sie BaseJsonNode oder java.util.Map

+1

Wie ich schrieb, versuchte ich auch BaseJsonNode, mit dem gleichen Ergebnis. Map scheint zu funktionieren, danke. Ich bekomme dann ein JSON-Objekt mit dem neuen ObjectMapper(). WriteValueAsString (paymentInfoEntity.getParams()). –

Verwandte Themen