我有一个字段是java.time.LocalDate类型。它为我的用户存储生日。

@Past
@Column(nullable=false)
private LocalDate dateOfBirth;


我最近在我的Maven项目中包含了休眠验证器。我知道有一个称为@Past的注释,但我看到它不能包含任何参数。我希望用户的生日在过去的100年到3年之间。

我目前正在检查服务类中的内容,如下所示:

LocalDate dateOfBirth = account.getDateOfBirth();
    if(dateOfBirth == null) throw new SignupFormException("Date of Birth is required!", "dateOfBirth");

    LocalDate now = LocalDate.now();
    Period age = Period.between(dateOfBirth, now);

    if(age.getYears() > 100) throw new SignupFormException("Invalid date of birth!", "dateOfBirth");
    if(age.getYears() < 3 && !age.isNegative()) throw new SignupFormException("Age too low!", "dateOfBirth");
    if(age.isNegative()) throw new SignupFormException("Invalid date of birth!", "dateOfBirth");


我在Controller类中使用@ExceptionHandler弹簧注释捕获了异常。但是我的帐户验证服务中有很多代码,因此我想使用这些标记。

是否可以使用休眠验证器引擎来做到这一点?

最佳答案

不,您不能在这种情况下使用@Past

对于涉及自定义逻辑的此类验证器,您可以构建自己的验证器:
您可以按照以下示例操作https://www.baeldung.com/spring-mvc-custom-validator

您还应该使用来自javax.validations的验证器,因为这是标准验证库

09-10 16:21