入参日期校验注解

简介: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;
}

到这里,就结束了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值