我正在尝试迁移某些JSON数据绑定代码的实现细节,以使用Java EE 8 JSON-B API而不是Jackson。
为了匹配Jackson的默认行为,我希望拒绝当JSON有效负载包含无法识别的属性时,将JSON有效负载反序列化为POJO的任何尝试。
例如,如果我有以下JSON文件:
{
"name": "Bob",
"extraProp": "Something"
}
我有以下Java对象将这些数据建模为:
public class Thing {
public String name;
// no mention of "extraProp"
}
我如何拒绝将上述JSON数据绑定到上述POJO的尝试?
如果我尝试以下操作,Thing
对象的创建没有错误(这里我想要发生错误):
Jsonb jsonb = JsonbProvider.provider()
.create()
.build();
Thing t = jsonb.fromJson(new FileReader("thing.json"), Thing .class);
答案 0 :(得分:3)
不幸的是,就我所知,JSON-B规范并不允许这样做。
第3.18节说
当反序列化期间的JSON绑定实现遇到它无法识别的键/值对中的键时,它应该将JSON文档的其余部分视为元素根本没有出现,特别是实现不得处理此作为错误条件。
但是,参考实现seems to support一个名为' jsonb.fail-on-unknown-properties'您可以设置为启用此功能。 Johnzon,另一个实现,也是seems to,但它没有记录(但是?)。它的财产名为' johnzon.fail-on-unknown-properties'。