Java Jackson反序列化缺少的默认值

Java Jackson反序列化缺少的默认值,java,jackson,deserialization,json-deserialization,lombok,Java,Jackson,Deserialization,Json Deserialization,Lombok,我尝试使用以下代码反序列化API中接收的JSON对象: ObjectMapper mapper = new ObjectMapper(); ExampleDto ed = mapper.readValue(req.body(), ExampleDto.class); 我的类使用Lombok生成构造函数、getter和setter,如下所示: @Data @AllArgsConstructor @NoArgsConstructor public class ExampleDto { pr

我尝试使用以下代码反序列化API中接收的JSON对象:

ObjectMapper mapper = new ObjectMapper();
ExampleDto ed = mapper.readValue(req.body(), ExampleDto.class);
我的类使用Lombok生成构造函数、getter和setter,如下所示:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ExampleDto {
    private String name = "";
    private List<String> values = new LinkedList<>();
}
values
字段为
null
。根据我的理解,以及我找到的所有示例代码,
应该是一个空列表


编辑:不是重复的,因为我正在使用不带选项的Lombok

@allargsconstuctor
创建以下构造函数

@ConstructorProperties({"name", "values"})
ExampleDto(String name, List<String> values) {
    this.name = name;
    this.values = values;
}
因为在提供的JSON中没有
values
的值,所以在调用构造函数时,为第二个参数传递
null


如果删除
@allargsconstuctor
注释,jackson databind将使用setter方法初始化对象,在这种情况下,
值将不会为
null

可能重复谢谢,这解决了我的问题。我一直讨厌这种问题。即使现在我知道了这个问题,也很难找到更多的信息,如果我们想保留@AllArgsConstructor??我们如何告诉Jackson不要使用这个all args构造函数?@user2668735您可以使用
@allargsconstuctor(onConstructor=@(JsonIgnore))
保留
@allargsconstuctor
,并确保包含默认构造函数
@ConstructorProperties({"name", "values"})
ExampleDto(String name, List<String> values) {
    this.name = name;
    this.values = values;
}
mapper.readValue("{\"name\": \"Foo\"}", ExampleDto.class);