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;

  • 相关阅读:
    收藏:iBLC编码器
    蛙蛙推荐:怎样调试asp.net黄页错
    蛙蛙推荐:IE下3px bug研究
    蛙蛙推荐:winform入门
    蛙蛙推荐:蛙蛙牌云存储服务
    整理:个人知识管理相关链接
    蛙蛙推荐:c#编写网络电话
    蛙蛙推荐:蛙蛙教你解析网络包
    有用的SQL 语句(转) dodo
    .net 点击刷新验证码问题 dodo
  • 原文地址:https://www.cnblogs.com/zouhong/p/15319095.html
Copyright © 2011-2022 走看看