通过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