【发布时间】:2017-06-08 13:41:24
【问题描述】:
我有以下(简化的)类:
@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"
// ...
}
这在一般情况下工作正常,但是当这个实体由 Spring 构建时会出现问题(特别是 Spring Data Repository 以响应创建它的 REST 请求)。 Spring 看到全参数构造函数并使用它,为 foo 设置一个空值(在这种情况下,它没有在 POST 数据中设置),我最终得到一个 foo 的空值,而不是预期的"Some Default Value"。 @Builder.Default。
简单地创建setter并防止空值是行不通的。我可以明确地写出 AllArgsConstructor ,但这(在某种程度上)在某种程度上违背了 Lombok 的目的。不是一个糟糕的解决方案,但并不理想。
谁能想到任何解决方法?
【问题讨论】:
-
您是否尝试更改 AccessType。在课堂上试试这个
@AccessType(AccessTpe.FIELD) -
我看不出它是如何工作的。 AccessType 是关于数据层如何获取要持久化的值的,对吧?直接通过字段或通过访问器。此外,默认值已经是字段访问,所以这甚至不会是一个改变,我不认为。
标签: spring spring-data lombok