如何在 Project Lombok 设置器中进行自定义验证

问题描述 投票:0回答:3

我有一个项目(ID3 标记),其中包含数十个 setter 和 getter。我正在调查龙目岛项目,看看它对我有何帮助。

一些可以设置的字段有非常严格的要求,包括字符编码、位设置、长度检查、字符范围等等。我可以使用构建器模式,但是,在某些情况下可能不需要该模式。如果我想使用验证方法和/或类而不是注释怎么办?如何在 Netbeans 项目中访问 Lombok 的 setter 来添加这些验证?

java netbeans lombok
3个回答
6
投票

简短的回答是你不能。

现在唯一支持的一致性检查是

@Nonnull
。如果您想要其他东西,您必须手动编写设置器。显然,没有任何工具可以完成您列出的所有检查,并且通过注释来描述它们充其量也很麻烦。

有时,这个功能请求会有所帮助。它可能太粗粒度,无法满足您的需求。很多时候,您所需要的只是手动编写一些设置器。此功能对于不可变对象更有用,因为它将提供向生成的构造函数添加验证的唯一方法。


5
投票

虽然目前无法对 setter 进行验证,但 您可以在 lombok Builder 上进行自定义验证。

为此,您应该重写 Builder.build 方法并将验证放在那里。示例代码片段如下所示

@Getter
@EqualsAndHashCode
@ToString
@Builder(builderClassName = "Builder",buildMethodName = "build")
public class Customer {
    private long id;
    private String name;

    static class Builder {
        Customer build() {
            if (id < 0) {
                throw new RuntimeException("Invaid id");
            }
            if (Objects.isNull(name)) {
                throw new RuntimeException("name is null");
            }
            return new Customer(id, name);
        }
    }
}

来源和信用


1
投票

您还可以在构造函数上使用

@Builder
并在其中添加验证。 构建时将使用带注释的构造函数。

示例:


@Getter
@EqualsAndHashCode
 class MyDto {

    private final String thisCannotBeNull;
    private final String someOtherValue;
    private final String thisValueCannotBeNull;
    private final String someValue2;

    @Builder
    public MyDto(@JsonProperty("thisValueCannotBeNull") final String thisValueCannotBeNull,
                                 @JsonProperty("someOtherValue") final String someOtherValue,
                                 @JsonProperty("thisValueCannotBeNull") final String someOtherValue,
                                 @JsonProperty("someValue2") final String someValue2) {
        this.thisCannotBeNull = notNull(thisValueCannotBeNull);
        this.thisValueCannotBeNull = notNull(thisValueCannotBeNull);
        this.someOtherValue = someOtherValue;
        this.someValue2 = someValue2;
    }
}
如果您对此不感兴趣,请忽略

@JsonProperty

。这里的主要思想是构造函数中的 notNull 验证

© www.soinside.com 2019 - 2024. All rights reserved.