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

How to reject deserialization of unrecognized properties with JSON-B

我正在尝试迁移一些 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("{\"name\":\"Bob\",\"extraProp\":\"Something\"}", Thing .class);

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

第 3.18 节说

When JSON Binding implementation during deserialization encounters key in key/value pair that it does not recognize, it should treat the rest of the JSON document as if the element simply did not appear, and in particular, the implementation MUST NOT treat this as an error condition.

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