如何确保 Jackson 中包含字段

How to ensure field inclusion in Jackson

我有一个 POJO,我想从 JSON 创建这个 class 的实例。我正在使用 jackson 将 JSON 转换为 Object。我想确保 JSON 包含我的 POJO 的所有属性。 JSON 可能包含其他额外字段,但它必须包含 POJO 的所有属性。

示例:

class MyClass {
    private String name;
    private int age;

    public String getName(){return this.name;}
    public void setName(String name){this.name = name;}
    public int getAge(){return this.age;}
    public void setAge(int age){this.age = age;}
}

JSON#1

{
    "name":"Nayan",
    "age": 27,
    "country":"Bangladesh"
}

JSON#2

{
    "name":"Nayan",
    "country":"Bangladesh"
}

在这里,我希望 JSON#1 成功转换为 MyClass,但 JSON#2 应该失败。我怎样才能做到这一点?这个有注释吗?

好吧,有一个注释可以应用于您的属性,表明它们是必需的。

@JsonProperty(required = true)
public String getName(){ return this.name; }

不好的部分是,截至目前 (2.5.0),不支持反序列化验证。

...
Note that as of 2.0, this property is NOT used by BeanDeserializer: support is expected to be added for a later minor version.

2013 年有一个未解决的问题来添加验证:Add support for basic "is-required" checks on deserialization using @JsonProperty(required=true)