【问题标题】:using lombok @Singular with jackson @JsonPOJOBuilder使用 lombok @Singular 和杰克逊 @JsonPOJOBuilder
【发布时间】:2017-10-27 21:10:27
【问题描述】:

通过jackson Smile反序列化器调试后,发现我的List注解@Singular没有被jackson找到。

有没有办法用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 效果很好。

【问题讨论】:

    标签: java jackson lombok


    【解决方案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. 创建您自己的构建器,将元素添加到预先存在的列表中

    我使用 lombok 1.16.18 和 jackson 2.9.2 进行了测试

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      • 2014-08-22
      • 2012-05-12
      • 1970-01-01
      相关资源
      最近更新 更多