简介:String类型、int类型等常用的参数都有@NotNull、@NotEmpty、@Max、@Min等java提供的注解校验。在网上没有找到比较好用的日期参数校验的注解。这里是一个日期校验的注解类及使用说明,便于自己项目中经常使用到。
一、注解类的代码
import org.apache.commons.lang3.StringUtils;
import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.FIELD;
/**
* 日期校验工具类注解
**/
@Target({FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {DateValidator.DateValidatorInner.class})
public @interface DateValidator {
/**
* 显示校验的信息
* @return
*/
String message() default "日期格式不匹配{dateFormat}";
/**
* 用于分组校验
* @return
*/
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String dateFormat() default "yyyy-MM-dd HH:mm:ss";
class DateValidatorInner implements ConstraintValidator<DateValidator, String> {
private String dateFormat;
/**
* 校验逻辑
*
* @param value
* @param constraintValidatorContext
* @return
*/
@Override
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
if (StringUtils.isEmpty(value)) {
return true;
}
/**
* 判断格式相同
*/
if ((value.length() != dateFormat.length())) {
return false;
}
/**
* 判断可以转换成日期
*/
return DateUtils.checkDateFormat(value, dateFormat);
}
@Override
public void initialize(DateValidator dateValidator) {
this.dateFormat = dateValidator.dateFormat();
}
}
}
二、日期工具类
import org.apache.commons.lang3.StringUtils;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.LocalTime;
public class DateUtils {
/**
* 检查日期格式
*
* @param dateStr 待检查日期字符串
* @param datePattern 日期格式
*/
public static boolean checkDateFormat(String dateStr, String datePattern) {
if (StringUtils.isBlank(dateStr)) {
return false;
}
try {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(datePattern);
LocalDate.parse(dateStr, dateTimeFormatter);
return true;
} catch (DateTimeParseException e) {
return false;
}
}
}
三、日期参数注解使用
@Data
public class UserDTO {
@NotBlank(message="开始日期不能为空")
@DateValidator(dateFormat = "yyyyMMdd", message = "开始日期格式不匹配")
private String startDate;
}
到这里,就结束了。