【问题标题】:Default value for Lombok @Value without @Builder没有 @Builder 的 Lombok @Value 的默认值
【发布时间】:2020-10-21 19:12:44
【问题描述】:

有没有办法为带有@Value 注释的模型下的字段提供默认值。 例如:

@Value
class Book {
  String title;
  List<String> authors;
}

在上述模型中,Jackson 将作者从 json 有效负载反序列化为 null,作者为 null,但我希望作者将 [] 作为默认值,而不是 null。 我知道下面不起作用,因为由于@Value,字段变为private final

  List<String> authors = Collections.emptyList();

我可以覆盖 all args 构造函数,但模型本身非常大,所以我正在寻找类似于 Builder.Default 但对于 @Value 的东西。

【问题讨论】:

  • 你不想要@Builder的原因是什么?
  • @Builder@Singular 很好。我一直在寻找一个班轮解决方案,因为只有一个这样的字段是列表。我必须使用的模型非常大,有很多级别的嵌套类,因为很多测试都是使用模型和他们的孩子的 allargsconstructor 编写的,修改为 builder 是相当痛苦的

标签: java jackson lombok


【解决方案1】:

您可以添加自己的构造函数来初始化authors 字段。

@Value
@AllArgsConstructor
static class Book {
    String title;
    List<String> authors;

    public Book(String title) {
        this(title, Collections.emptyList());
    }
}

@AllArgsConstructor 是必需的,因为在添加自定义构造函数时,@Value 跳过了所有字段构造函数的生成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    相关资源
    最近更新 更多