- 先定义一个注解
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = DateTimeStrValidator.class)
public @interface DateTimeStr {
String message() default "format incorrect";
String format() default "yyyy-MM-dd HH:mm:ss";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
- 编写校验类
package com.aerosatlink.serviceagent.config;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.text.SimpleDateFormat;
public class DateTimeStrValidator implements ConstraintValidator<DateTimeStr, String> {
private DateTimeStr dateTimeStr;
@Override
public void initialize(DateTimeStr dateTimeStr) {
this.dateTimeStr = dateTimeStr;
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null) {
return true;
}
String format = dateTimeStr.format();
if (value.length() != format.length()) {
return false;
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
try {
simpleDateFormat.parse(value);
} catch (Exception e){
return false;
}
return true;
}
}
- 在实体类上使用注解
@DateTimeStr(message = "sessionBegin not satisfied with format yyyy-MM-dd HH:mm:ss ")
private String sessionBegin;
- 在controller层接口位置使用@Valid注解,开启校验