【问题标题】:Validate year with current year using Lombok使用 Lombok 验证年份与当前年份
【发布时间】:2016-08-03 05:34:28
【问题描述】:

在我的应用程序中,我的字段名称“年份”仅包含年份(2016、2015 .....)。但是我必须验证这个“年份”字段,这个字段应该包含当前年份。

我检查了所有 Lombok 验证注释,但没有找到任何对我有帮助的注释。我怎样才能做到这一点?

【问题讨论】:

  • 你的意思是你有一个年份的setter,需要检查输入是否有效?如果没有 Bean Validation API 注释可以这样做,只需在代码中执行此操作
  • 如果这个字段总是包含当前年份,为什么需要它?也许您只是将其硬编码为new Date() 或类似的东西?

标签: spring-data-jpa bean-validation lombok


【解决方案1】:

我认为没有 lombok 验证约束注释。如果有我不知道。

我假设您的字段是整数。所以,我建议你下一个解决方案:

解决方案 1 - java bean 验证约束注解

您可以添加一个以 'is'like next 开头的方法并添加 java 验证约束 @assertTrue

private int year;

@AssertTrue
public boolean isCurrentYear(){
    return LocalDate.now().getYear() == year;
}

解决方案 2 - 以编程方式

创建一个方法来保护您的构造函数、setter 或同时检查年份整数是否为当前年份:

private int year;

//Constructor
public YourClass(int year){
    checkCurrentYear(year);
    this.year = year;
}

//Setter    
public void setYear(int year){
    checkCurrentYear(year);
    this.year= year;
}

public void checkCurrentYear(int year){
    if(!isCurrentYear()) // or (LocalDate.now().getYear() != year)
        throw new IllegalArgumentException("Year must be the current");
}

解决方案 3 - 实现您的 Spring 验证器

实现 spring 验证器接口并在需要时使用它:

public class YourClass implements Validator {

   public boolean supports(Class clazz) {
      return YourClass.class.equals(clazz);
   }

   public void validate(Object obj, Errors e) {

    YourClass p = (YourClass) obj;
    if (LocalDate.now().getYear() != p.getYear()) {
        e.rejectValue("year", "notcurrentyear");
    } 
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多