7

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

1 回答 1

8

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

第 3.18 节说

当反序列化期间的 JSON Binding 实现遇到它无法识别的键/值对中的键时,它应该将 JSON 文档的其余部分视为该元素根本没有出现,特别是,实现不得将此视为错误健康)状况。

但是,参考实现似乎支持一个名为“jsonb.fail-on-unknown-properties”的属性,您可以设置它来启用它。Johnzon 是另一个实现,似乎也是,但它没有记录(还没有?)。它的属性被命名为“johnzon.fail-on-unknown-properties”。

于 2017-10-14T00:24:45.510 回答