java - 从 Jackson 获取未知字段列表

标签 java json jackson

我有一个 JSON 模式和一个与该模式匹配的 json 字符串,除了它可能有一些额外的字段。如果我不添加 objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false, false);,那么如果存在这些字段,Jackson 将抛出异常。有没有办法获取这些额外字段的集合来记录它们,即使我抛出异常?

这是代码的相关部分:

public boolean validate(Message<String> json) {
    List<String> errorList = jsonSchema.validate(json.getPayload());
    ObjectMapper mapper = new ObjectMapper();
    try {
        Update update = mapper.readValue(json.getPayload(), Update.class);
    } catch (IOException e) {
        System.out.println("Broken");
    }
    if(!errorList.isEmpty()) {
        LOG.warn("Json message did not match schema: {}", errorList);
    }
    return true;
}

最佳答案

我认为没有开箱即用的选项。

然而,您可以将这些未知字段与@JsonAnyGetter 和@JsonAnySetter 一起保存在映射(Hashmap、Treemap)中,如this article 中所示。和 this one .

将此添加到您的更新类:

  private Map<String, String> other = new HashMap<String, String>();

  @JsonAnyGetter
  public Map<String, String> any() {
   return other;
  }

 @JsonAnySetter
  public void set(String name, String value) {
   other.put(name, value);
  }

如果额外字段列表不为空,您可以自己抛出异常。检查方法:

 public boolean hasUnknowProperties() {
   return !other.isEmpty();
  }

关于java - 从 Jackson 获取未知字段列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30894269/

相关文章:

json - 如何在所有子项中查询具有特定值的属性的firebase

javascript - 格式化 JSON 数据以用于 Twitter Feed

java - 可以在每次调用的基础上设置属性 @JSONIGnore 吗?

java - 没有注释的其余实现

java - 如何替换对于字符串来说太大的文件中的文本

javascript - jQuery json 对象 if 语句

java - 序列化列表生成 "Item"个节点

java - 当参数存在时从 json 转换为对象时出错

java - java中vlcj播放视频失败

java - JTable 颜色行和单元格动态