当 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(使用前将#替换为@)