@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(
validatedBy = {PatternDateValidator.class}
)
public @interface PatternDate {
String regexp();
Pattern.Flag[] flags() default {};
String message() default "时间格式不正确";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class PatternDateValidator implements ConstraintValidator<PatternDate, String> {
private String regexp;
@Override
public void initialize(PatternDate constraintAnnotation) {
this.regexp = constraintAnnotation.regexp();
}
@Override
public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
SimpleDateFormat formatter = new SimpleDateFormat(regexp);
try {
Date date = formatter.parse(s);
if (s.length() - formatter.format(date).length() > 0) return false;
} catch (ParseException e) {
return false;
}
return true;
}
}