Jackson Deserializer如何递归地反序列化考虑@JsonFormat注释的字段?

时间:2016-10-24 10:22:46

标签: java jackson deserialization date-formatting

在实体的自定义反序列化器中,我希望以某种方式递归地调用(某些)字段的反序列化,从而遵循@JsonFormat注释。更具体地说,这就是Deserializer的样子:

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);
}

在该示例中,JsonParser.readValueAs()不带注释

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

模式,因此因未知(德国)日期格式而生成异常。

有没有办法反序列化对象的字段,以便它遵循带注释的格式?

1 个答案:

答案 0 :(得分:0)

如果整个redeemableFrom对象不需要自定义反序列化,则可以通过调用treeToValue()将其作为常规Java对象解析,并带有注释。这样的事情应该有效:

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