忽略“无法从 START_ARRAY 令牌中反序列化 java.util.LinkedHashMap 实例”错误

2023-12-15

我正在使用来自外部合作伙伴的 API。不幸的是,返回的响应似乎没有固定的结构。理想情况下,API 合同意味着它不会被违反,但这种情况不断发生。

无论如何,JSON 响应中的字段主要是一个映射,但有时,突然它是一个列表。

例如,假设以下是我通常得到的响应:

{
  "majorInfo" : {
    "a" : "b"
  },
  "minorInfo" : {
    "c" : "d"
  }
}

但在极少数情况下,我会得到一份清单而不是地图或其他违反合同的行为。

例如:

{
  "majorInfo" : {
    "a" : "b"
  },
  "minorInfo" : []
}

我正在使用 jackson 将此响应映射到 POJO。在某些情况下,当违反合同时,我会收到错误,

线程“main”中的异常 com.fasterxml.jackson.databind.JsonMappingException:不能 从 START_ARRAY 中反序列化 java.util.LinkedHashMap 的实例 代币

在这种情况下,即使遵守合同,我也会丢失 MajorInfo 字段中的信息。当某个字段不遵守合同时,有什么方法可以忽略它吗?在这种情况下,我的 POJO 的majorInfo 成员将被正确设置,但minorInfo 成员将为空。

我知道 @JsonIgnoreProperties(ignoreUnknown = true) 但这会always忽略minorInfo 字段。我只希望当该领域不遵守合同时忽略它。那可能吗?

我也尝试过

mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 

但这也不起作用。

还有其他可能的解决方案吗?可以肯定的是,外部合作伙伴不会为我们更改他们的 API。那么,我们这边有什么可行的解决方案吗?

谢谢

编辑: 一种解决方案是我为这两种变体都有一个 POJO,并将代码放在 try catch 块中。如果 JSON 响应只有一个字段违反了约定,并且仅以一种特定方式违反了约定,那么这种方法可能会起作用。我实际上得到的反应是巨大的,这是我在第三场比赛中发现的第三次违规行为。我不能继续放置 try catch 块,到了第三次违规时,我意识到最好的选择是忽略违反它的字段。


我找到了使用以下线程作为参考的解决方案:Jackson:忽略属性而不是抛出 JsonMappingException

我编写了一个自定义反序列化器并用它来忽略错误。

public class CustomListingDeserializer extends JsonDeserializer<Map<String, Listing>>{

    public CustomListingDeserializer() {
        // TODO Auto-generated constructor stub
    }

    @Override
    public Map<String, Listing> deserialize(JsonParser arg0, DeserializationContext arg1)
            throws IOException, JsonProcessingException {

        ObjectMapper mapper = new ObjectMapper();
        JsonNode node = arg0.readValueAsTree();

        try
        {
            return mapper.readValue(node.toString(), new TypeReference<Map<String,Listing>>(){});

        }
        catch (JsonMappingException e)
        {
            System.out.println("Issue in deserializing : " + e.getMessage() + "for :" + node.toString());
        }
        catch (Exception e)
        {
            throw e;
        }
        // TODO Auto-generated method stub
        return null;
    }

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

忽略“无法从 START_ARRAY 令牌中反序列化 java.util.LinkedHashMap 实例”错误 的相关文章

  • 如何在java中将一个数组列表替换为另一个不同大小的数组列表

    我有两个大小不同的数组列表 如何从此替换 ArrayList
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • 内部类的构造函数引用在运行时失败并出现VerifyError

    我正在使用 lambda 为内部类构造函数创建供应商ctx gt new SpectatorSwitcher ctx IntelliJ建议我将其更改为SpectatorSwitcher new反而 SpectatorSwitcher 是我正
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • JSON:TypeError:Decimal('34.3')不是JSON可序列化的[重复]

    这个问题在这里已经有答案了 我正在运行一个 SQL 查询 它返回一个小数列表 当我尝试将其转换为 JSON 时 出现类型错误 查询 res db execute SELECT CAST SUM r SalesVolume 1000 0 AS
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • 从 SD 卡创建一个可绘制对象以设置为 Android 中的背景

    我正在尝试使用 SD 卡中的图像并将其设置为相对布局的背景 我尝试过在这里和其他地方找到的其他解决方案 但它们似乎对我不起作用 这是我的代码 我已经评论了我尝试过但不起作用的其他方法 唯一对我有用的是使用 setBackgroudnReso
  • 绑定到 VisualStateManager 中控件的属性

    我在 Stackoverflow 上搜索了这个问题 但我认为其他帖子没有涵盖这个问题 在我的自定义控件中 我使用视觉状态管理器 视觉状态管理器内部有一个动画 可以对元素的高度进行动画处理 当我尝试绑定到控件属性时 我在启动时收到以下错误 附
  • 上传文件不起作用 - 需要帮助

    我正在尝试使用 WebBrowser 控件上传文件 图像 似乎无法做到这一点 需要一些帮助 这是 HTML
  • 从 servlet 访问数据

    我有一个要求 mysql 数据库只能从本地主机访问 我必须实现一个 servlet 来访问数据库 从而允许该系统中的其他服务器访问数据 servlet 将充当代理 然而 该系统由一个远程服务器组成 该服务器下载大部分数据并执行如下语句 se
  • Bash 中的 RSS 日期到纪元

    寻找 bash 行以采用 RSS 日期格式 例如 Fri 13 Sep 2013 17 16 45 GMT 并将其转换为毫秒 我已经尝试过如下的事情 它们不会在几毫秒内产生 我运行的是 Mac OS X Snow Leopard 10 6
  • 在新存储库上推送原始主错误

    我刚刚开始使用 git 和 github 我按照他们的指示进行操作 但在最后一步遇到了错误 我正在检查当前不受源代码控制的现有目录 项目大约一周前 除此之外 我的用例应该是非常普通的 这是发生的事情 git push origin mast
  • 如何隐藏行索引

    我想将此 DataFrame 写入不带索引值的 xlsx 文件 我该怎么做 writer pd ExcelWriter r D pandas xlsx today datetime datetime today header pd Mult
  • 将 1 和 0 的字符串转换为二进制值

    我正在尝试将来自 stdin 的传入 1 和 0 字符串转换为各自的二进制值 其中诸如 11110111 之类的字符串将转换为 0xF7 这看起来很微不足道 但我不想重新发明轮子 所以我想知道 C C 标准库中是否有任何东西已经可以执行这样
  • 数组中给定数字的最小窗口

    最近看到这个问题 给定 2 个数组 第二个数组包含第一个数组的一些元素 返回第一个数组中包含第二个数组的所有元素的最小窗口 Eg 给定 A 1 3 5 2 3 1 和 B 1 3 2 Output 3 5 其中 3 和 5 是数组 A 中的
  • Javascript'this'值改变,但不明白为什么

    我是一个 Javascript 新手 我正在尝试了解 OLN 我遇到的是 当从同一对象上的另一个方法调用对象方法时 被调用方法中 this 的本地值正在改变 这是我的代码 var generator generateForLevelSkil
  • 使用 MPAndroidChart 库重叠饼图标签

    我正在使用菲尔杰MPAndroid图表图书馆 implementation com github PhilJay MPAndroidChart v3 1 0 And I implemented Pie Chart Pie Chart wit
  • 在Xamarin浏览器控件中访问html响应内容

    我有一个似乎不寻常的要求 我和我的同事无法在我们的 Xamarin 项目中实现 我们试图做的是动态处理浏览器导航到的任何页面的内容 而不是简单地处理从其访问的初始 URL 返回的内容 我见过以这种方式访问 返回内容的解决方案 Xamarin
  • 如何在 C# 中创建动态大小的数组或重新调整数组的大小?

    我需要知道如何在 C 中动态调整数组大小 在我下面编写的方法中 我需要能够返回一个仅包含用户输入的数字 最多 8 个数字 的数组 因此 如果用户决定只想输入 3 个数字 则数组应该只包含 3 个数字 而不是 8 个 现在我知道数组在实例化时
  • 在 Spring 测试中禁用 @EnableScheduling

    当我运行单元测试时 它会调用我的计划任务 我想防止这种行为 这是因为我有 EnableScheduling在我的主要应用程序配置上 如何在单元测试中禁用此功能 我遇到过这个问题 答案这建议设置配置文件 不知道我会怎么做 或者是否太过分了 我
  • MySQL 查询 - 使用 URL 名称识别数据,其中数据被组织成层次结构

    我有一个名为 content 的 mysql 表 它存储内容管理系统的内容数据 注意 所有内容都使用父 id 列组织成层次结构 id slug content type id parent 1 portfolio 5 0 2 about u
  • Java 同时淡入和淡出两个 JPanel

    我有一个 JPanel 列表 我想将其显示为 幻灯片 其中一个 JPanel 淡出 列表中的下一个 JPanel 淡入 这是我正在摆弄的代码 public float opacity 0f private Timer fadeTimer p
  • 在 Windows 上仅安装 Quicktime 库

    There s Quicktime SDK对于 Windows 但任何使用它的应用程序都需要在系统上安装 Quicktime 运行时库 SDK 本身只有标头和库存根 而不是实际的 DLL 如果我的应用程序使用 Quicktime 我想使用其
  • Jquery MVC 4 客户端验证不起作用

    我正在尝试在一个简单的 MVC 4 应用程序上使用 jQuery 验证插件 我在 MVC 3 中完成的操作没有任何问题 但我根本无法让它工作 我希望在以下情况下触发验证 1 我的控制失去焦点 2 提交表单 任何关于我错过的想法将不胜感激 L
  • Google place api 在 Android 中显示错误

    我在这里面临一个奇怪的问题 我想从我的 Android 应用程序查询 google 地点网络服务 为此 我总是收到错误 此服务需要 API 密钥 然而 当我尝试使用 Chrome 浏览器和服务器密钥查询它时 我得到了正确的响应 对于 and
  • 忽略“无法从 START_ARRAY 令牌中反序列化 java.util.LinkedHashMap 实例”错误

    我正在使用来自外部合作伙伴的 API 不幸的是 返回的响应似乎没有固定的结构 理想情况下 API 合同意味着它不会被违反 但这种情况不断发生 无论如何 JSON 响应中的字段主要是一个映射 但有时 突然它是一个列表 例如 假设以下是我通常得