即使标记为@NonNull 也没有给出某些字段,则 Gson.fromJson 不会失败

hat*_*lla 7 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;
}
Run Code Online (Sandbox Code Playgroud)

我在做的时候,

GSON.fromJson(str, Abc.class);
Run Code Online (Sandbox Code Playgroud)

与 str 为:

{
"id": "dsada",
"id2": 12,
"data": ["dsadsa"]
}
Run Code Online (Sandbox Code Playgroud)

在此,没有 otherData 字段。即便如此,GSON.fromJson 也没有失败。为什么会这样?那么,将该字段标记为@NonNull 是否有任何意义?

mic*_*alk 3

Altgough 使用 lombok@Value你会得到一个 allArgs 构造函数,Gson 不会使用它。请注意,lombok 将为您生成 allArg 构造函数,因此不会有 noArg 构造函数 - 但这对于 Gson 来说不是问题(从 Gson 2.3.1 开始 - 检查这个 SO 问题)。

@NonNull注解将使 lombok 在构造函数内生成 null 检查,但不会调用此构造函数。这就是为什么 Gson 会毫无问题地读取你的 Json。