Lombok Builder在Spring Data中有默认值

时间:2017-06-08 13:41:25

标签: spring spring-data lombok

我有以下(简化)课程:

DATA.field == value

这在一般情况下工作正常,但是当这个实体由Spring构建时(特别是Spring Data Repository响应创建它的REST请求)会出现问题。 Spring看到all-args构造函数并使用它,为foo设置一个空值(在这种情况下,它没有在POST数据中设置)并且我最终得到foo的空值而不是预期的@Entity @Data @Builder @NoArgsConstructor // @Builder creates the all-args version but I need this one elsewhere. @AllArgsConstructor(access = AccessLevel.PRIVATE) // Having @NoArgsConstructor disables the @AllArgsConstructor needed by @Builder unless I have this explicitly applied public class MyClass { // ... @Builder.Default private String foo = "Some Default Value" // ... } "Some Default Value"

仅仅创建setter并阻止空值无效。我可以明确地写出AllArgsConstructor,但是(某种程度上)在一定程度上击败了Lombok的目的。不是一个可怕的解决方案,但并不理想。

有人能想到任何解决方法吗?

2 个答案:

答案 0 :(得分:0)

我知道您可以使用非lombok默认值指定默认值。我没有尝试过这个特例,但值得一试。

@Value(“#{prop ['my.property']?:12345}”)

也许您应该尝试使用RequiredArgs构造函数,该构造函数仅指定使用“每个final / non-null字段一个参数”并且不会覆盖var的构造函数。

https://projectlombok.org/features/constructor

答案 1 :(得分:0)

我能够在我的模型类中使用PrePersist注释来解决这个问题。使用PrePersist,我可以确保null值设置为默认值,无论它们何时设置为null或由谁设置。不是真正的解决方案,但我应该做的事情,所以这是一个可接受的解决方法。