【问题标题】:How can Jackson Deserializer recursively deserialize fields taking @JsonFormat annotations into account?Jackson Deserializer 如何在考虑 @JsonFormat 注释的情况下递归反序列化字段?
【发布时间】:2016-10-24 10:22:45
【问题描述】:

在实体的自定义反序列化器中,我想以某种方式递归调用(某些)字段的反序列化,@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;

pattern 考虑在内,因此由于未知(德语)日期格式而生成异常。

有什么方法可以反序列化对象的字段以使其尊重带注释的格式?

【问题讨论】:

    标签: java jackson deserialization date-formatting


    【解决方案1】:

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

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

    【讨论】:

    • 不。未使用 @JsonFormat,因此会出现 HttpMessageNotReadableException,因为该值无法反序列化为 Date。我的观点是:我有一个带有格式注解的字段,如何调用这个字段进行反序列化以便使用指定的格式?
    猜你喜欢
    • 2016-09-30
    • 2022-11-10
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 2019-03-28
    相关资源
    最近更新 更多