java – 使用lombok @Singular和jackson @JsonPOJOBuilder

通过jackson微笑反序列化器调试后,我发现我用@Singular注释的List并没有被jackson找到.

有没有办法用杰克逊@JsonPOJOBuilder制作@Singular?

@JsonDeserialize(builder = MyClass.MyClassBuilder.class)
@Value
@Builder
@RequiredArgsConstructor
@EqualsAndHashCode
public class MyClass {

    @NonNull String name;
    @NonNull @Singular List<String> favs = new ArrayList<>();

    @JsonPOJOBuilder(withPrefix = "")
    public static final class MyClassBuilder {
    }
}

将@Singular更改为@ Builder.Default工作正常.

最佳答案 这里的问题是你初始化favs字段:

List<String> favs = new ArrayList<>();

由于@Value注释是最终的.因此,它不能由构建器或@RequiredArgsConstructor生成的构造函数设置/覆盖.通过尝试自己构造实例来验证:

MyClass.builder().name("a").fav("1").fav("2").build();

intellij在这里说没有fav方法,但@Builder @Singular应该创建一个.
解决方法:

>跳过字段声明中的favs初始化,让lombok,jackson初始化
>创建自己的构建器,在预先存在的列表中添加元素

我测试了lombok 1.16.18和jackson 2.9.2

点赞