我有一个字段是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
的验证器,因为这是标准验证库