使用 Spring Boot 或 Hibernate Validator 验证日期

g3b*_*blv 4 java validation spring hibernate-validator spring-boot

我已经使用 Spring Boot 构建了一个 REST 服务。我也在使用 Hibernate Validator 来验证数据。我有一个像这样的 REST 端点:

@PostMapping(value = "${apiVersion.v_1}" + "/parameter-dates")
    public ResponseEntity createParameterDate( @RequestBody ParameterDate parameterDate){
// Some code that use parameterDate
}
Run Code Online (Sandbox Code Playgroud)

ParameterDate 在这样的类中定义:

public class ParameterDate {

    @NotNull(message = "Parameter Date Unadjusted can not be blank or null")
    private Date parameterDateUnadjusted;
    @NotNull(message = "Parameter Date Adjusted can not be blank or null")
    private Date parameterDateAdjusted;
    private Date parameterDateAdded;
    private Date parameterDateChanged;    
}
Run Code Online (Sandbox Code Playgroud)

我想验证parameterDateUnadjustedparameterDateAdjusted确保它们都是有效日期。我已经尝试过,@DateTimeFormat(pattern = "yyyy-MM-dd")但只要它们坚持使用yyyy-MM-dd. 一个例子是2017-01-40它只是解释为2017-02-09. 我想@DateTimeFormat与其说是验证器,不如说是格式化程序。我使用Hibernate确认者也尝试@Patternrexexp喜欢@Pattern(regexp="\\t(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\\d\\d\\t")。但这给了我错误

V000030: No validator could be found for constraint 'javax.validation.constraints.Pattern' validating type 'java.util.Date'. Check configuration for 'parameterDateAdjusted'

有什么建议可以验证这些日期吗?

Jai*_*o99 5

以下是为 Date 对象实现验证器的示例:

@Target({ ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MyDateValidator.class)
@Documented
public @interface ValidDate {

    String message() default "some message here";

    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default { };
}

public class MyDateValidator implements ConstraintValidator<ValidDate, Date> {
   public void initialize(ValidDate constraint) {
   }

   public boolean isValid(Date value, ConstraintValidatorContext context) {
      // validate the value here.
   }
}
Run Code Online (Sandbox Code Playgroud)