即使标记为@NonNull,但未提供某些字段,Gson.fromJson也不会失败

时间:2019-06-30 20:12:14

标签: java gson lombok

我的POJO定义如下:

@Value
public class Abc {

    @NonNull
    private final String id;

    @NonNull
    private final Integer id2;

    @NonNull
    private final List<String> data;

    @NonNull
    private final String otherData;
}

我做的时候,

GSON.fromJson(str, Abc.class);

,str为:

{
"id": "dsada",
"id2": 12,
"data": ["dsadsa"]
}

在此,没有otherData字段。即使这样,GSON.fromJson也不会失败。为什么会这样呢?那么,将字段标记为@NonNull有什么意义?

1 个答案:

答案 0 :(得分:2)

使用龙目岛@Value的Altgough,您将获得allArgs构造函数,Gson将不会使用它。请注意,lombok将为您生成allArg构造函数,因此将没有noArg构造函数-但这对Gson来说不​​是问题(从Gson 2.3.1开始-选中this SO question)。

@NonNull注释将使lombok在构造函数内部生成空检查,但不会调用该构造函数。这就是为什么Gson会毫无问题地读取您的Json的原因。