我有以下(简化)课程:
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的目的。不是一个可怕的解决方案,但并不理想。
有人能想到任何解决方法吗?
答案 0 :(得分:0)
我知道您可以使用非lombok默认值指定默认值。我没有尝试过这个特例,但值得一试。
@Value(“#{prop ['my.property']?:12345}”)
也许您应该尝试使用RequiredArgs构造函数,该构造函数仅指定使用“每个final / non-null字段一个参数”并且不会覆盖var的构造函数。
答案 1 :(得分:0)
我能够在我的模型类中使用PrePersist注释来解决这个问题。使用PrePersist,我可以确保null值设置为默认值,无论它们何时设置为null或由谁设置。不是真正的解决方案,但我应该做的事情,所以这是一个可接受的解决方法。