java - Jackson Deserializer 如何在考虑 @JsonFormat 注释的情况下递归地反序列化字段?

标签 java jackson deserialization date-formatting

在实体的自定义反序列化器中,我想以某种方式递归调用(某些)字段的反序列化,以尊重 @JsonFormat 注释。更具体地说,解串器如下所示:

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;

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

是否有任何方法可以反序列化对象的字段,以便它遵循带注释的格式?

最佳答案

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

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

关于java - Jackson Deserializer 如何在考虑 @JsonFormat 注释的情况下递归地反序列化字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40216026/

相关文章:

java - 如何动态地将外部定义的bean定义添加到Spring上下文中?

java - 如何有效地找到具有相同字符数的最长子串

java - 对 TreeMap 中的 ArrayList<String> 进行排序

java - 无法从 START_ARRAY token 中反序列化对象的实例

java - 使用 Jackson 的动态字段名称

android - Gson反序列化JSON不同类型(ANDROID)

php - JMSSerializerBundle,反序列化后持久化没有关系

c# - 在 C# 中,它是否与在 Java 中引用在方法期间创建对象相同?

java - 使用 Jackson 反序列化包装列表

C# 无法从 API 调用读取 json 响应