1、为什么要自定义?

通过上篇学习,了解到很多常用注解了,但是呢,总是有那么些需求....

2、案例分析(手机号格式)

2.1、需要验证的实体 Bean

public class LoginVo {@NotNull@IsMobile //自定义的注解private String mobile;@NotNull@Length(min=32)private String password;//省略 get set 方法
}

2.2、自定义 IsMobile  注解类

import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {IsMobileValidator.class })
public @interface  IsMobile {//允许为空的属性boolean required() default true;//如果校验不通过返回的提示信息String message() default "手机号码格式错误";Class<?>[] groups() default { };Class<? extends Payload>[] payload() default { };
}

2.3、校验器

import  javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import org.apache.commons.lang3.StringUtils;
import com.imooc.miaosha.util.ValidatorUtil;//IsMobile:自定义的注解
//String:注解参数类型
public class IsMobileValidator implements ConstraintValidator<IsMobile, String> {//默认值_false,用于接收注解上自定义的 requiredprivate boolean required = false;//1、初始化方法:通过该方法我们可以拿到我们的注解public void initialize(IsMobile constraintAnnotation) {//constraintAnnotation.required() 接收我们自定义的属性,是否为空required = constraintAnnotation.required();}//2、逻辑处理public boolean isValid(String value, ConstraintValidatorContext context) {//2.1、如果允许为空的话,直接返回结果if(required) {return ValidatorUtil.isMobile(value);}else {//2.2、不允许为空//2.2.1、验证是否为空if(StringUtils.isEmpty(value)) {return true;}else {return ValidatorUtil.isMobile(value);}}}}

3、总结

自定义注解需要去手动实现两个文件:自定义注解类 + 注解校验器类自定义注解类:message() + groups() + payload() 必须;注解校验器类:继承 ConstraintValidator 类<注解类,注解参数类型> + 两个方法(initialize:初始化操作、isValid:逻辑处理)

jsr-303 参数校验—自定义校验注解相关推荐

  1. 如何使用JSR 303 进行后台数据校验?

    文章目录 一.JSR 303 1.什么是 JSR 303? 2.为什么使用 JSR 303? 3.JSR 303 常见操作? 二.使用 JSR 303 相关注解处理逻辑 1.JSR 303 注解处理逻 ...

  2. spring-java使用Validation参数验证-自定义校验器

    在开发JAVA服务器端代码时,我们会遇到对外部传来的参数合法性进行验证,而hibernate-validator提供了一些常用的参数校验注解,我们可以拿来使用. spring-boot-web,内嵌了 ...

  3. Java 校验注解的使用、自定义校验注解

    文章目录 一.引入依赖 二.基本校验 1. 常用校验注解 2. 自动校验 3. 代码中获取校验结果 三.嵌套校验 四.分组校验 五.单属性自定义校验规则 1. 功能:只能取枚举的值 六.多属性自定义联 ...

  4. 自定义依赖注解无效_SpringValidation用注解代替代码参数校验解析

    Spring Validation 概念 在原先的编码中,我们如果要验证前端传递的参数,一般是在接受到传递过来的参数后,手动在代码中做 if-else 判断,这种编码方式会带来大量冗余代码,十分的不优 ...

  5. Spring MVC代码实例系列-06:Spring MVC配置Hibernate-Validator以及自定义校验注解

    超级通道 :Spring MVC代码实例系列-绪论 本章主要记录,如何在Spring MVC中添加Hibernate-Validator以及自定义校验注解.本章主要涉及的技术点有: javax.val ...

  6. Spring 使用 JSR303自定义校验注解+分组校验

    我们有这样一个需求,想要校验一个int类型的变量,校验它的值必须为我们所指定的值,且在修改状态分组时生效. @ListValue(vals = {0, 1}, groups = {UpdateStat ...

  7. element form自定义校验_SpringBoot分组校验及自定义校验注解

    前言   在日常的开发中,参数校验是非常重要的一个环节,严格参数校验会减少很多出bug的概率,增加接口的安全性.在此之前写过一篇SpringBoot统一参数校验主要介绍了一些简单的校验方法.而这篇则是 ...

  8. 使用validate注解做校验以及自定义validate注解

    Springboot版本:2.3.1.RELEASE 引入依赖 <dependency><groupId>org.springframework.boot</groupI ...

  9. hibernate-validate如何校验controller+service+分组校验+自定义注解实现校验规则等

    配置参数启动时校验 如果配置文件没有相关的配置,那么**启动时**就会出现以下异常: Description:Binding to target com.toby.provide.Applicatio ...

最新文章

  1. Sersync实现触发式文件同步
  2. openstack icehouse版本glance上传镜像
  3. 图解Transformer-一篇文章看懂transformer
  4. OC基础--成员变量的封装
  5. CSS3特效 - 呼吸灯效果
  6. Android NDK开发篇(四):Java与原生代码通信(原生方法声明与定义与数据类型)
  7. 【P1714】切蛋糕(单调队列)
  8. 微软想通了?Windows 11恢复一键改变默认浏览器功能
  9. 百度站内搜索应该注意哪些方面?
  10. /proc/sys目录下文件的查看方法
  11. VS Code中powershell无法运行cnpm, vue等命令
  12. 改MD5防止你的视频被百度云秒和谐
  13. R语言之dpqr概率函数
  14. java timeunit_java – 了解TimeUnit
  15. linux系统微内核,微内核操作系统的定义及用微内核设计的系统,附Linux是单内核结构介绍...
  16. Maven(m2e)集成之二
  17. win10开机有东西一闪而过_Win10 开机以后不一会儿会弹出一个黑框,usoclient.exe 一闪而过。这东西对电脑有...
  18. 妈,别再乱买保健品了!
  19. 固态硬盘之模组(成品)厂商
  20. 树莓派系统安装资源和步骤说明

热门文章

  1. 工作403-修改input里面的文本框值
  2. [css] 怎么给手持设备添加特殊样式?
  3. 前端学习(2592):当前用户显示
  4. 工作110:地址里面返回参数
  5. 工作88:vue实现当前页面刷新
  6. 前端学习(2464):vue中 slot
  7. 前端学习(2371):组件之间的通讯方式
  8. 前端学习(1650):前端系列实战课程之字符串常用方法
  9. 前端学习(566):margin auto机制
  10. Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系