繁体   English   中英

我如何教杰克逊从两个分离的 JSON 对象中获取相同的字段?

[英]How do I teach Jackson to source the same field from two disjunctive JSON objects?

我有一些现有数据以多种形式存在但需要读入同一个类的情况。

例如,给定类:

@Getter
@NoArgsConstructor
@AllArgsConstructor
public class Item {

  private UUID itemId;
}

我可能有一些格式正确且开箱即用可解析的 JSON(例如List<Item> ):

{
  "items": [
    {
      "itemId": "<uuid>"
    }
  ]
}

但也有一些不是:

{
  "items": [
    {
      "someItemId": "<uuid>"
    }
  ]
}

我没有同时包含这两个字段的源 JSON。

我尝试使用this question中描述的自定义反序列化处理程序来做到这一点,但我的用例有点不同,因为我基本上会做类似的事情:

try {
  Item item = defaultDeserializer.deserialize(...);
} catch (UnrecognizedPropertyException e) {
  // try to rebuild object manually by traversing the tree
}

这将是相当困难的,因为我不能让杰克逊再做繁重的工作了。 有替代方法吗? 是否可能有一种基于注释的方法可以允许“从这些 JSON 字段中的任何一个字段中获取此字段,但不能同时从两者中获取该字段”之类的东西?

您可以像这样使用@JsonAlias

@Getter
@NoArgsConstructor
@AllArgsConstructor
public class Item {

  @JsonAlias("someItemId")
  private UUID itemId;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM