java 如何在Project Lombok setters中进行自定义验证

osh3o9ms  于 2023-11-15  发布在  Java
关注(0)|答案(3)|浏览(134)

我有一个项目(ID 3标记),其中包含几十个setter和getter。我正在研究Lombok项目,看看它如何帮助我。
一些可以设置的字段有非常严格的要求,可能包括字符编码,位设置,长度检查,字符范围等。我可以使用构建器模式,但可能在某些情况下不需要模式。如果我想使用验证方法和/或类而不是注解,该怎么办?我如何在我的Netbeans项目中访问Lombok的setter以添加这些验证?

djp7away

djp7away1#

简短的回答是你不能。
现在唯一支持的一致性检查是@Nonnull。如果你想要其他的东西,你必须手动编写你的setter。显然,没有工具可以完成你列出的所有检查,通过注解描述它们充其量是麻烦的。
有时候,这个feature request可能会有帮助。它可能太粗了,不适合你的需要。很多时候,你需要的只是手动编写一些setter。这个特性对不可变对象更有用,因为它将提供唯一的方法来为生成的构造函数添加验证。

nwsw7zdq

nwsw7zdq2#

虽然setter上的验证目前还不可能,但**你可以在lombok Builder上进行自定义验证。
要做到这一点,你应该覆盖Builder.build方法,并把你的验证放在那里。

  1. @Getter
  2. @EqualsAndHashCode
  3. @ToString
  4. @Builder(builderClassName = "Builder",buildMethodName = "build")
  5. public class Customer {
  6. private long id;
  7. private String name;
  8. static class Builder {
  9. Customer build() {
  10. if (id < 0) {
  11. throw new RuntimeException("Invaid id");
  12. }
  13. if (Objects.isNull(name)) {
  14. throw new RuntimeException("name is null");
  15. }
  16. return new Customer(id, name);
  17. }
  18. }
  19. }

字符串
source and credit

展开查看全部
db2dz4w8

db2dz4w83#

你也可以在一个构造函数上使用@Builder,并在那里添加验证。在构建时,将使用带注解的构造函数。
例如:

  1. @Getter
  2. @EqualsAndHashCode
  3. class MyDto {
  4. private final String thisCannotBeNull;
  5. private final String someOtherValue;
  6. private final String thisValueCannotBeNull;
  7. private final String someValue2;
  8. @Builder
  9. public CreateOrderRequestDto(@JsonProperty("thisValueCannotBeNull") final String thisValueCannotBeNull,
  10. @JsonProperty("someOtherValue") final String someOtherValue,
  11. @JsonProperty("thisValueCannotBeNull") final String someOtherValue,
  12. @JsonProperty("someValue2") final String someValue2) {
  13. this.thisCannotBeNull = notNull(thisValueCannotBeNull);
  14. this.thisValueCannotBeNull = notNull(thisValueCannotBeNull);
  15. this.someOtherValue = someOtherValue;
  16. this.someValue2 = someValue2;
  17. }
  18. }

字符串
如果你对@JsonProperty不感兴趣,就忽略它。这里的主要思想是构造函数中的notches验证

展开查看全部

相关问题