zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    数据库字段太多,批量快速建立实体类方法(适合大量字段建立实体类)
    SQL service 中的 ”输入SQL命令窗口“ 打开了 “属性界面” 回到 ”输入SQL命令窗口“
    计算机软件编程英语词汇集锦
    编程常用英语词汇
    svn上传和下载项目
    当启动tomcat时出现tomcat setting should be set in tomcat preference page
    Implicit super constructor Object() is undefined for default constructor. Must define an explicit constructor
    eclipse中选中一个单词 其他相同的也被选中 怎么设置
    Spring Boot的@SpringBootApplication无法引入的问题
    最全的SpringCloud视频教程
  • 原文地址:https://www.cnblogs.com/zouhong/p/15319095.html
Copyright © 2011-2022 走看看