太简单了,下面是现成的代码,直接拷贝就能用,具体细节可参考博主这篇文章
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
@Target({ FIELD, METHOD, PARAMETER, ANNOTATION_TYPE, TYPE_USE })
@Retention(RUNTIME)
@Constraint(validatedBy = DateTimeFormat.CheckDateTimeFormatValidator.class)
public @interface DateTimeFormat {
String message() default "时间格式错误";
String value();
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
class CheckDateTimeFormatValidator implements ConstraintValidator<DateTimeFormat, String> {
private String format;
@Override
public void initialize(DateTimeFormat constraintAnnotation) {
this.format = constraintAnnotation.value();
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null || value.isEmpty()) {
return true;
}
boolean convertSuccess = true;
SimpleDateFormat sdf = new SimpleDateFormat(this.format);
try {
sdf.setLenient(false);
sdf.parse(value);
} catch (ParseException e) {
convertSuccess = false;
}
return convertSuccess;
}
}
}