2016-10-24 5 views
1

In einem benutzerdefinierten Deserializer für eine Entity möchte ich die Deserialisierung von (einigen der) Feldern rekursiv so aufrufen, dass @ JsonFormat-Annotationen berücksichtigt werden. dies ist konkreter, wie die Deserializer wie folgt aussehen:Wie kann Jackson Deserializer Felder rekursiv deserialisieren, die @JsonFormat-Anmerkungen berücksichtigen?

public class DealPatchDeserializer extends JsonDeserializer<DealPatch> { 
    public DealPatch deserialize(JsonParser p, DeserializationContext ctxt) 
      throws IOException, JsonProcessingException { 
     JsonNode root = p.readValueAsTree(); 
     JsonNode redeemableFromNode = root.path("redeemableFrom"); 
     JsonParser redeemableFromParser = redeemableFromNode.traverse(p.getCodec()); 
     Date date = redeemableFromParser.readValueAs(Date.class); 
} 

In diesem Beispiel die JsonParser.readValueAs() nicht übernimmt die kommentierten

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd.MM.yyyy") 
private Date redeemableTo; 

Muster berücksichtigt, und erzeugen somit eine Ausnahme wegen der unbekanntes (deutsches) Datumsformat

Gibt es eine Möglichkeit, Felder eines Objekts zu deserialisieren, so dass es die kommentierten Formate berücksichtigt?

Antwort

0

Wenn das gesamte Objekt redeemableFrom keine benutzerdefinierte Deserialisierung benötigt, können Sie es als normales Java-Objekt mit den Anmerkungen analysieren, indem Sie treeToValue() aufrufen. So etwas sollte funktionieren:

p.getCodec().treeToValue(redeemableFromNode, RedeemableFrom.class); 
+0

Nein. Das @ JsonFormat wird nicht verwandt und als Konsequenz gibt es eine HttpMessageNotReadableException, da der Wert nicht zu einem Datum deserialisiert werden kann. Mein Punkt ist: Ich habe ein Feld, das eine Formatanmerkung hat, wie kann ich dieses Feld zur Deserialisierung aufrufen, so dass das angegebene Format verwendet wird? – Gregor

Verwandte Themen