我有一个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有什么意义?

最佳答案

使用lombok @Value的Altgough,您会得到一个allArgs构造函数,Gson将不会使用它。请注意,lombok将为您生成allArg构造函数,因此将没有noArg构造函数-但这对Gson来说不​​是问题(从Gson 2.3.1开始-检查this SO question)。
@NonNull批注将使lombok在构造函数内部生成空检查,但不会调用该构造函数。这就是为什么Gson会毫无问题地阅读您的Json的原因。

关于java - 即使标记为@NonNull,如果未提供某些字段,Gson.fromJson也不会失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56827743/

10-08 23:55