Gson是否内置检测JSONObject未映射键值对的功能
Gson检测未解析键值对的方案说明
- 默认行为:Gson在常规配置下,遇到JSON结构中存在、但接收实体类未定义的键值对时,会直接静默忽略该字段,不会抛出异常也不会输出任何提示。你举例中额外添加的
"year":"2022"字段,默认解析流程里不会有任何反馈,会被直接丢弃。 - 内置检测能力:Gson 2.9.0及以上版本提供了开箱即用的配置项,可以实现未知字段的检测提示,不需要额外引入第三方依赖。构建Gson实例时开启严格解析模式即可:
Gson gson = new GsonBuilder() .setStrictness(Strictness.STRICT) .create();
配置完成后,只要解析的JSON中包含实体类未定义的键,Gson会直接抛出JsonParseException,明确提示存在无法匹配的未知字段,告知你哪些键值对没有被存储到对应的类变量中,解析流程会同步终止。
- 低版本兼容方案:如果你使用的Gson版本低于2.9.0,没有内置的未知字段检测开关,可以通过自定义
TypeAdapterFactory的方式扩展解析逻辑,既可以选择遇到未知字段直接抛错,也可以选择收集所有未匹配的键值对,在解析完成后统一输出,不会阻断正常解析流程。
补充说明:如果你不需要在解析时实时提示,只是想兜底接收所有未定义的字段,可以在实体类中增加一个
Map<String, Object>类型的成员变量,搭配对应注解配置兜底逻辑,所有匹配不到明确字段的键值对都会自动存入这个Map中,后续可以直接遍历查看未被显式定义的键。
内容的提问来源于stack exchange,提问作者CodinGuy
相关产品推荐
相关产品推荐

