• SpringBoot自定义校验注解校验日期时间格式字符串


    1 概述

    后台单独对接收到的参数进行验证时比较麻烦,springboot项目的web组件(spring-boot-starter-web)集成了hibernate-validator,开发者可以直接使用hibernate-validator提供的注解对数据进行校验,当有一些复杂的参数校验时我们也可以自定义校验注解

    2、先定义一个注解

    package com.ideatech.ams.ws.validate;
    
    import javax.validation.Constraint;
    import javax.validation.Payload;
    import java.lang.annotation.*;
    
    @Target({ElementType.FIELD, ElementType.PARAMETER})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Constraint(validatedBy = DateTimeValidator.class)
    public @interface DateTimeStr {
    
        String message() default "{javax.validation.constraints.DateTimeStr.message}";
    
    
        String format() default "yyyy-MM-dd HH:mm:ss";
    
        Class<?>[] groups() default {};
    
        Class<? extends Payload>[] payload() default {};
    }

       @Constraint,指定校验类
        message,失败提示信息
        groups,分组验证(后面介绍)
        payload,不知道,欢迎留言探讨

    2、编写校验类

    package com.ideatech.ams.ws.validate;
    
    import javax.validation.ConstraintValidator;
    import javax.validation.ConstraintValidatorContext;
    import java.lang.annotation.Annotation;
    import java.text.SimpleDateFormat;
    
    public class DateTimeValidator implements ConstraintValidator<DateTimeStr,String>{
    
        private  DateTimeStr  dateTimeStr;
    
    
        @Override
        public void initialize(DateTimeStr dateTimeStr) {
            this.dateTimeStr=dateTimeStr;
        }
    
        @Override
        public boolean isValid(String value, ConstraintValidatorContext context) {
            // 如果 value 为空则不进行格式验证,为空验证可以使用 @NotBlank @NotNull @NotEmpty 等注解来进行控制,职责分离
            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;
        }
    }

    1:必须实现ConstraintValidator接口

    2:实现了ConstraintValidator接口后即使不进行Bean配置,spring也会将这个类进行Bean管理

    3:可以在实现了ConstraintValidator接口的类中依赖注入其它Bean

    4:实现了ConstraintValidator接口后必须重写 initialize 和 isValid 这两个方法;initialize方法主要来进行初始化,通常用来获取自定义注解的属性值;isValid 方法主要进行校验逻辑,返回true表示校验通过,返回false表示校验失败,通常根据注解属性值和实体类属性值进行校验判断

        /**
         * 银行通知客户临柜时间(必填)
         */
        @NotBlank(message="银行通知客户临柜时间不能为空")
        @DateTimeStr(format ="yyyy-MM-dd HH:mm:ss", message = "格式错误,正确格式为:yyyy-MM-dd HH:mm:ss")
        private String bankApplyTime;

  • 相关阅读:
    外设驱动库开发笔记5:AD7705系列ADC驱动
    ROS+LEDE最强上网软路由
    Flume1.9.0的安装、部署、简单应用(含分布式、与Hadoop3.1.2、Hbase1.4.9的案例)
    通过 Sqoop1.4.7 将 Mysql5.7、Hive2.3.4、Hbase1.4.9 之间的数据导入导出
    Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建
    Centos7 二进制安装 Kubernetes 1.13
    Centos7 使用 kubeadm 安装Kubernetes 1.13.3
    go get获取gitlab私有仓库的代码
    Nginx设置Https反向代理,指向Docker Gitlab11.3.9 Https服务
    Docker 创建 Bamboo6.7.1 以及与 Crowd3.3.2 实现 SSO 单点登录
  • 原文地址:https://www.cnblogs.com/zouhong/p/15319095.html
Copyright © 2020-2023  润新知