如何使用JSON-B拒绝无法识别的属性的反序列化

时间:2017-09-21 15:29:53

标签: java-ee jsonb-api

我正在尝试迁移某些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);

1 个答案:

答案 0 :(得分:3)

不幸的是,就我所知,JSON-B规范并不允许这样做。

第3.18节说

  

当反序列化期间的JSON绑定实现遇到它无法识别的键/值对中的键时,它应该将JSON文档的其余部分视为元素根本没有出现,特别是实现不得处理此作为错误条件。

但是,参考实现seems to support一个名为' jsonb.fail-on-unknown-properties'您可以设置为启用此功能。 Johnzon,另一个实现,也是seems to,但它没有记录(但是?)。它的财产名为' johnzon.fail-on-unknown-properties'。