【SpringBoot】Validator组件+自定义约束注解实现手机号码校验和密码格式限制

03-09 1159阅读 0评论

【SpringBoot】Validator组件+自定义约束注解实现手机号码校验和密码格式限制

【SpringBoot】Validator组件+自定义约束注解实现手机号码校验和密码格式限制,【SpringBoot】Validator组件+自定义约束注解实现手机号码校验和密码格式限制,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,方法,接口,第2张
(图片来源网络,侵删)


🏡浩泽学编程:个人主页

 🔥 推荐专栏:《深入浅出SpringBoot》《java对AI的调用开发》
              《RabbitMQ》《Spring》《SpringMVC》 🛸学无止境,不骄不躁,知行合一

文章目录

  • 前言
  • 一、@Constraint介绍
    • 用法
    • 二、具体实现
    • 总结

      前言

      SpringBoot项目实现Validator组件+自定义约束注解(自定义校验规则)@IsMobile校验手机号码以及密码格式限制。


      一、@Constraint介绍

      • @Constraint注解是Java Bean Validation框架中的一个注解,用于自定义约束注解,即自定义校验规则。
      • 通过在自定义注解上添加@Constraint注解,可以将该注解标记为一个自定义约束注解。同时,需要指定一个实现了ConstraintValidator接口的验证器类,用于验证该注解所标记的字段或参数是否符合自定义的校验规则。

        用法

        @Constraint注解的属性:

        • validatedBy:用于指定实现了ConstraintValidator接口的验证器类。该属性的值是一个Class对象数组,可以指定多个验证器类。
        • message:用于指定当校验失败时,所返回的错误信息。可以使用占位符{},在校验器中使用具体的参数替换。
        • groups:用于指定分组,即根据不同的分组应用不同的校验规则。
        • payload:用于指定元数据,即可以通过该属性传递一些额外的验证信息。

          使用@Constraint注解,可以通过自定义注解的方式,为字段或参数添加自定义的校验规则,并实现校验逻辑。这样,在进行参数校验时,可以方便地通过注解的方式来调用自定义的校验规则。

          ConstraintValidator接口,它有两个泛型,第一个是自定义的注解类,第二个就是要验证的数据的类型,有两个方法,分别是initialize(初始化方法)和isValid(验证逻辑方法),返回true,则验证通过,否则是不通过。

          二、具体实现

          • 在做项目登录时,我采用的是手机号+密码登录,这时就需要手机号校验和密码格式限制,这些正确后再去数据库验证手机号密码是否正确。
          • 手机号:11位且符合手机号格式规定,不为空;密码:最短为6位,不为空。

            引入组件依赖(SpringBoot版本选择的是2.6.3):

            【SpringBoot】Validator组件+自定义约束注解实现手机号码校验和密码格式限制,【SpringBoot】Validator组件+自定义约束注解实现手机号码校验和密码格式限制,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,方法,接口,第3张
            (图片来源网络,侵删)
            
            	org.springframework.boot
            	spring-boot-starter-validation
            
            

            封装一个登录参数类LoginVo:

            import com.example.seckill.validator.IsMobile;
            import lombok.Data;
            import org.hibernate.validator.constraints.Length;
            import javax.validation.constraints.NotNull;
            /**
             * @Version: 1.0.0
             * @Author: Dragon_王
             * @ClassName: LoginVo
             * @Description: 登录参数
             * @Date: 2024/1/23 17:18
             */
            @Data
            public class LoginVo {
                @NotNull
                @IsMobile
                private String mobile;
                @NotNull
                @Length(min = 6)
                private String password;
            }
            

            其中@IsMobile是自定义的校验手机号的注解。其他注解是validation组件中的。可以看到实现了不为空以及密码格式限制(最少六位),组件内还有许多注解,自己查询使用。下面看一下手机号校验的具体实现。

            创建手机号校验工具类:

            import org.springframework.util.StringUtils;
            import java.util.regex.Matcher;
            import java.util.regex.Pattern;
            /**
             * @Version: 1.0.0
             * @Author: Dragon_王
             * @ClassName: ValidatorUtil
             * @Description: 手机号码校验
             * @Date: 2024/1/23 17:48
             */
            public class ValidatorUtil {
                private static final Pattern mobile_pattern = Pattern.compile("^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\d{8}$");
                public static boolean isMobile(String mobile){
                    if (StringUtils.isEmpty(mobile)){
                        return false;
                    }
                    Matcher matcher = mobile_pattern.matcher(mobile);
                    return matcher.matches();
                }
            }
            

            创建自定义注解@IsMobile:

            import com.example.seckill.vo.IsMobileValidator;
            import javax.validation.Constraint;
            import javax.validation.Payload;
            import java.lang.annotation.*;
            /**
             * @Version: 1.0.0
             * @Author: Dragon_王
             * @ClassName: isMobile
             * @Description: 验证是否是手机号
             * @Date: 2024/1/24 13:47
             */
            @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
            @Retention(RetentionPolicy.RUNTIME)
            @Documented
            @Constraint(
                    validatedBy = { IsMobileValidator.class }
            )
            public @interface IsMobile {
                boolean required() default true;
                String message() default "手机号码格式错误";
                Class[] groups() default {};
                Class

免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,1159人围观)

还没有评论,来说两句吧...

目录[+]