GSON有没有办法一点都不“手软”?

2023-11-30

当 JSON 字符串包含与目标 POJO 类不匹配的字段名称时,GSON 似乎会默默地忽略。概述了一种解决方案here建议使用注释来标记“必填”字段,以使 GSON 在反序列化不包含字段的字符串时失败。

但我们定义 POJO 必须“精确”匹配(当我们允许传入对象为 null 时,它们必须在 POJO 中声明为可选字段 - 并且我们有一个特殊的类型适配器,可以将 null 转换为Optional.empty()实例)。所以allPOJO 中的字段是强制性的。并且 null 不是有效值。

按照我链接到的那个问题的指导,似乎only让 gson 在解析时失败的方法:对反序列化过程创建的对象进行完整的“深度反射”扫描,并检查是否有任何可选字段为空。

或者也许-我错过了一些东西,并且有一种更简单的方法来拥有 gsontell当我们的 JSON 字符串包含错误的字段名称时我该怎么办?

(背景:我们刚刚遇到了一个问题,因为嵌套结构深处的字段名称错误 - 导致出现我们意想不到的空对象)


事实证明:这个“不足”确实是gson的一个核心设计点:它是一个JSONparser。验证是not在gson的范围内。

因此“正确”的答案是使用java bean验证注释并放置一些实现框架(例如休眠验证器 or 阿帕奇bval) 到位。

或者,可以在创建 gson 实例时注册特殊类型适配器。这种类型适配器使用反射来通过一些检查代码覆盖内部映射 - 允许相对“干净”的解决方案,这会导致 gson 在运行到“未知”字段时抛出异常。 ( 谢谢安迪·特纳用于指向对应的github 问题跟踪器条目 --- 代码可以在那里找到)

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

GSON有没有办法一点都不“手软”? 的相关文章

随机推荐

  • Javascript字符串替换不起作用[重复]

    这个问题在这里已经有答案了 所以我有一个字符串 房间描述 并且想替换部分
  • 如何尝试解析枚举值?

    我想编写一个函数 它可以根据给定值 作为字符串传递 验证可能的值enum 如果匹配 它应该返回枚举实例 否则 它应该返回默认值 该函数不能在内部使用try catch 这排除了使用Enum Parse 当给出无效参数时会引发异常 我想使用类
  • jquery click() 事件不适用于附加的 html 标签

    在我的问题有意义之前 我需要解释一些事情 在我的第一页上 我有一个主 div 我在其中使用 jquery load 方法从另一个页面加载标记 我正在加载的 html 链接到我的脚本所在的 js 页面 js 页面是我操作主 div 内容的地方
  • 通过 NSStream 在 iOS 设备之间发送后解析数据

    我有一个应用程序设置为在两个 iOS 设备之间发送数据NSStream通过 TCP 连接 发送的数据由两部分组成 一个整数 指示即将到来的消息对象的大小 消息对象 一些NSStrings and an NSData使用 NSKeyedArc
  • 如何更改 FireFox 中悬停选择选项的颜色

    我想更改 FireFox 中悬停的选择选项的颜色 它具有默认的蓝色背景和白色前景 我试过
  • Azure 数据工厂中没有管道图

    我使用复制数据向导创建了 2 个管道 但当我单击 图表 操作时 两个管道都没有显示 我收到消息 该工厂不包含管道或数据集 管道均成功运行 并且在单击 管道 边栏选项卡时确实会显示 两条管道均配置为一次性 关于为什么会发生这种情况以及如何解决
  • int(11) 与 int(任何其他)

    我是网络编程新手 正在做一些可以在网上找到的不同教程 我进行了研究 发现在 int 11 中 11 是整数的最大显示宽度 并且它是默认值 除非整数是 UNSIGNED 在本例中为 10 当我看到这样的东西时 id INT 11 not nu
  • 如何使用 asp.net 在 Chrome 中删除或过期 cookie

    这是那些愚蠢的问题之一 答案应该很简单 但似乎不起作用 有人知道我还能去哪里寻找代表吗 我在单击按钮时添加 cookie var impersonationCookie new HttpCookie UserImp ImpAuid impe
  • 从函数返回值,其中 ipython 小部件用于获取输入参数

    我正在尝试 小部件化 我的 IPython 笔记本 但在事件和函数返回值方面遇到了麻烦 这是我认为最好的工作流程 使用小部件获取任意函数的输入值 在事件触发时调用该函数 从函数返回值 我首先尝试使用 interact 方法来调用该函数 但这
  • 有没有办法在构造函数中使用锁定的标准输入和输出,使其与您正在构造的结构一样长?

    我正在建造一个PromptSet可以连续提出一系列问题 出于测试原因 它允许您传递读取器和写入器 而不是直接使用标准输入和标准输出 因为 stdin 和 stdout 是常见的用例 所以我想创建一个默认的 构造函数 允许用户生成一个Prom
  • 如何将 div 标签附加到 SVG 矩形元素中?

    我找不到这个问题的正确解决方案 所以我决定写一个新问题 我什至不确定这是否可能 但我希望如此 这是浏览器提供的 HTML 我从浏览器中的 元素 选项卡复制它
  • 如果 ModelState.IsValid 失败,收到错误消息吗?

    我的控制器中有这个功能 HttpPost public ActionResult Edit EmployeesViewModel viewModel Employee employee GetEmployee viewModel Emplo
  • JAVA .properties 文件

    有一个小问题 我创建了一个属性文件 config properties 位于 resource config properties 这是当前的文件 destinationPDF D Documents NetBeansProjects pr
  • 不同DBMS之间的数据迁移

    因为我无法得到任何满意的答案Question看来我们必须为此编写自己的程序 我们正处于设计阶段 我们正在考虑应该使用哪种格式来备份数据 该程序将用Delphi 编写 需要在 Oracle Informix Msserver 之间导出 导入数
  • 绝对 URL 无 Cookie

    ASP NET 中是否有某种方法可以通过无 Cookie 会话获取绝对 URL 更新 我需要创建其他新的 URL 这不是请求的 URL 我正在使用 Response ApplyAppPathModifier 来获取带有 cookie 会话的
  • 编译器错误消息:无法将类型“long”隐式转换为“string”

    我在转换方面遇到问题 这个转换有什么问题吗 这是错误 编译错误说明 在编译服务此请求所需的资源期间发生错误 请查看以下具体错误详细信息并适当修改您的源代码 编译器错误消息 CS0029 无法将类型 long 隐式转换为 string if
  • 如何在C++和QT中的另一个窗口中显示主窗口的结果图像?

    我目前正在研究 Qt Creator 我想通过在主窗口中从硬盘浏览来获取图像 然后将 RGB 彩色图像转换为灰度图像后 我想在另一个窗口中显示灰度图像 通过单击 浏览 按钮 可以加载彩色图像 其中将应用彩色到灰度图像转换 这里grayIma
  • 如何自定义语义 UI 按钮(背景颜色、边框半径等)

    如何自定义语义 UI 按钮 背景颜色 边框半径等
  • _uiState.value = uiState.value.copy() 不会导致重组

    我的代码出现了一些未解决的情况 我的目标是更改 设备 列表中项目的属性 更新布尔值 更改应该会导致视图重组 但这并没有发生 此外 我可以看到该项目确实随调试器而更改 但它也会导致添加一个附加项目 没有包含更改的旧副本 以显示在我的列表中 你
  • GSON有没有办法一点都不“手软”?

    当 JSON 字符串包含与目标 POJO 类不匹配的字段名称时 GSON 似乎会默默地忽略 概述了一种解决方案here建议使用注释来标记 必填 字段 以使 GSON 在反序列化不包含字段的字符串时失败 但我们定义 POJO 必须 精确 匹配