使用lombok @Singular和jackson @JsonPOJOBuilder

时间:2017-10-27 21:10:27

标签: java jackson lombok

通过jackson微笑解串器调试后,我发现杰克逊没有发现用List注释的@Singular

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

@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的工作正常。

1 个答案:

答案 0 :(得分:1)

此处的问题是您初始化favs字段:

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

归因于@Value注释的是final。因此,@RequiredArgsConstructor生成的构建器或构造函数无法设置/覆盖它。通过尝试自己构建实例来验证:

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

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

  1. 跳过字段声明中favs的初始化,让lombok,jackson初始化
  2. 创建自己的构建器,在先前存在的列表中添加元素
  3. 我测试了lombok 1.16.18和jackson 2.9.2

相关问题