我已经使用 Spring Boot 构建了一个 REST 服务。我也在使用 Hibernate Validator 来验证数据。我有一个像这样的 REST 端点:
@PostMapping(value = "${apiVersion.v_1}" + "/parameter-dates")
public ResponseEntity createParameterDate( @RequestBody ParameterDate parameterDate){
// Some code that use parameterDate
}
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;
}
我想验证
parameterDateUnadjusted
和 parameterDateAdjusted
以确保它们都是有效日期。我试过 @DateTimeFormat(pattern = "yyyy-MM-dd")
但只要他们坚持 yyyy-MM-dd
,它就不会因为没有验证而给我一个验证错误。 .一个例子是 2017-01-40
它只是解释为 2017-02-09
.我猜 @DateTimeFormat
与其说是 validator ,不如说是格式化程序。我也尝试使用 Hibernate Validator 的 @Pattern
和 rexexp
喜欢 @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'
有什么建议可以验证这些日期吗?
最佳答案
以下是为 Date 对象实现 validator 的示例:
@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.
}
}
关于java - 使用 Spring Boot 或 Hibernate Validator 验证日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44376401/