从 Jackson 获取未知字段列表

2024-02-05

我有一个 JSON 架构和一个与该架构匹配的 json 字符串,但它可能有一些额外的字段。如果我不添加这些字段,杰克逊将抛出异常objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);。有没有办法获取这些额外字段的集合来记录它们,即使我抛出异常?

这是代码的相关部分:

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)中,如下所示本文 http://vincentdevillers.blogspot.ro/2013/08/how-to-map-unknown-json-properties-with.html and this one http://demeranville.com/deserialising-json-or-xml-to-a-map-using-java/.

将其添加到您的 Update 类中:

  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();
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Jackson 获取未知字段列表 的相关文章

随机推荐

  • 如何获取祖父母/祖先进程ID?

    我想知道 如果可能的话 如何获取进程的祖父母 或更进一步 的pid 更具体地说 我想要一个进程在进程树中打印其深度 例如 当从以下内容开始时 int main int creator id int getpid pid t pid1 for
  • 对于尚未在缓存中的地址,CLFLUSH 如何工作?

    我们正在尝试使用 Intel CLFLUSH 指令在用户空间刷新 Linux 中进程的缓存内容 我们创建一个非常简单的 C 程序 首先访问一个大数组 然后调用 CLFLUSH 刷新整个数组的虚拟地址空间 我们测量 CLFLUSH 刷新整个数
  • 如何根据 JSON 数组中的字段对表格视图单元格进行分组

    本质上 我使用 JSON 数据创建数组并形成表格视图 我希望表格单元格按 JSON 数组中的字段之一进行分组 JSON 数据如下所示 customer Customer1 number 122039120 customer Customer
  • 使用清单关闭应用程序缓存

    我正在编写一个使用 带有清单的应用程序缓存 的 HTML5 应用程序 但是 当我正在开发时 我想将其关闭 我尝试从标签中删除清单属性 并将清单文件中的所有内容切换到网络 尽管它确实在第一次更新时进行了更新 但所有后续更新仍然是从缓存而不是服
  • pnpm 工作区:* 依赖项

    我在 Docker 容器内安装部分 pnpm monorepo 时遇到严重问题 问题是docker build在某些方面失败devDependencies甚至不应该安装 devDependencies types node 17 0 12
  • 保留@OneToMany与@JoinColumn和@MapKeyColumn的关系

    我有两个实体 Entity Article Id GeneratedValue strategy GenerationType AUTO private Long id OneToMany fetch FetchType EAGER cas
  • 覆盖 PhoneGap Android 中的后退按钮

    我试图完成多个 addEventListener 但出了什么问题 例如 如果页面上有 3 个 div 第一个显示在开头 其他两个隐藏 div a a a gt div div div initially hidden div div ini
  • Jenkins:当 Maven 构建发生在 Docker 容器内时如何使用 JUnit 插件

    我正在尝试创建一个管道 Jenkins 在其中构建我的 Docker 映像 运行测试 然后在测试通过时部署容器 问题是我在 docker 容器内运行了 Maven 并且在运行容器之前我无法实际访问已发布的测试 我希望在测试通过后运行并部署
  • TclError:Google Colab 中没有显示名称且没有 $DISPLAY 环境变量

    这个错误 TclError no display name and no DISPLAY environment variable 当我尝试在 Google Colab 协作 Jupyter 笔记本 中运行 Python 3 6 程序时 出
  • 设置值后如何防止复选框动画

    在 Android gt 21 lollipop 上 如果我更改复选框的选中状态 它会执行动画 我想阻止它 我尝试暂时设置stateListAnimator to null 但这并没有帮助 如何防止动画出现 我遇到过同样的问题 这对我有帮助
  • Sinatra 不在日志文件中显示异常

    我从 Rails 转到 sinatra 在使用日志记录时遇到一些问题 我有一个 Sinatra 应用程序 它的日志记录如下 configure do Logger class eval alias write lt lt logger Lo
  • 以数据库用户身份部署到 Azure 时 SSDT 删除并重新创建权限

    我们有一个 SSDT 项目 其中包括用户 角色和权限 它运行得非常好 但最近迁移到 Azure 导致或可能突出了部署问题 在 Azure 之前 某些项目成员在主数据库上拥有一个具有足够权限来发布数据库的用户 在 Azure SQL Db 中
  • 如何设置 CircularProgressIndicator 的大小?

    我正在尝试为我的应用程序制作一个加载屏幕 我正在使用CircularProgressIndicator小部件 但我想知道是否有办法让它的高度和宽度更大 它太小了 那么 有人可以帮我解决这个问题吗 你可以把你的CircularProgress
  • 如何计算Python中两个日期之间一年中的天数

    例如 date 1 1 january 2000 date 2 17 november 2006 我想知道2000年 2001年 2006年日期1和日期2之间有多少天 所以我需要返回类似这样的东西 无论它是否在列表中或其他东西中 2000
  • 启动时间慢

    有什么办法可以加快Groovy的启动时间吗 除非按照建议使用某种单独运行的 Groovy 进程 我不太关心执行时间 但缓慢的启动使我无法在 Groovy 中进行开发 在我的机器上使用 Groovy 和 Ruby 启动和运行空脚本之间的简单比
  • gwt使用jquery效果可以吗?

    在我的 gwt 中 我有一个像下面这样触发的按钮来创建新的小部件 UiHandler buttonfire void addNewWidget ClickEvent event htmlPanelHolder add new MyCusto
  • 将参数传递给槽

    我想用一堆 QActions 和 QMenus 覆盖 mouseReleaseEvent connect action1 SIGNAL triggered this SLOT onStepIncreased connect action5
  • Parallel.For 与 BigInteger 计算输出不同于 For 循环

    我有以下循环运行从 base95 到 base10 的转换 我正在处理几千位数字 因此需要 BigIntegers inst是base95字符串 Parallel For 0 inst Length x gt result BigInteg
  • 如何在web.xml和log4j.properties中配置log4j输出文件路径?

    我开发了一个网络应用程序 可以在其中注册员工 My web xml
  • 从 Jackson 获取未知字段列表

    我有一个 JSON 架构和一个与该架构匹配的 json 字符串 但它可能有一些额外的字段 如果我不添加这些字段 杰克逊将抛出异常objectMapper configure DeserializationConfig Feature FAI