jsr-303 参数校验—自定义校验注解
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 参数校验—自定义校验注解相关推荐
- 如何使用JSR 303 进行后台数据校验?
文章目录 一.JSR 303 1.什么是 JSR 303? 2.为什么使用 JSR 303? 3.JSR 303 常见操作? 二.使用 JSR 303 相关注解处理逻辑 1.JSR 303 注解处理逻 ...
- spring-java使用Validation参数验证-自定义校验器
在开发JAVA服务器端代码时,我们会遇到对外部传来的参数合法性进行验证,而hibernate-validator提供了一些常用的参数校验注解,我们可以拿来使用. spring-boot-web,内嵌了 ...
- Java 校验注解的使用、自定义校验注解
文章目录 一.引入依赖 二.基本校验 1. 常用校验注解 2. 自动校验 3. 代码中获取校验结果 三.嵌套校验 四.分组校验 五.单属性自定义校验规则 1. 功能:只能取枚举的值 六.多属性自定义联 ...
- 自定义依赖注解无效_SpringValidation用注解代替代码参数校验解析
Spring Validation 概念 在原先的编码中,我们如果要验证前端传递的参数,一般是在接受到传递过来的参数后,手动在代码中做 if-else 判断,这种编码方式会带来大量冗余代码,十分的不优 ...
- Spring MVC代码实例系列-06:Spring MVC配置Hibernate-Validator以及自定义校验注解
超级通道 :Spring MVC代码实例系列-绪论 本章主要记录,如何在Spring MVC中添加Hibernate-Validator以及自定义校验注解.本章主要涉及的技术点有: javax.val ...
- Spring 使用 JSR303自定义校验注解+分组校验
我们有这样一个需求,想要校验一个int类型的变量,校验它的值必须为我们所指定的值,且在修改状态分组时生效. @ListValue(vals = {0, 1}, groups = {UpdateStat ...
- element form自定义校验_SpringBoot分组校验及自定义校验注解
前言 在日常的开发中,参数校验是非常重要的一个环节,严格参数校验会减少很多出bug的概率,增加接口的安全性.在此之前写过一篇SpringBoot统一参数校验主要介绍了一些简单的校验方法.而这篇则是 ...
- 使用validate注解做校验以及自定义validate注解
Springboot版本:2.3.1.RELEASE 引入依赖 <dependency><groupId>org.springframework.boot</groupI ...
- hibernate-validate如何校验controller+service+分组校验+自定义注解实现校验规则等
配置参数启动时校验 如果配置文件没有相关的配置,那么**启动时**就会出现以下异常: Description:Binding to target com.toby.provide.Applicatio ...
最新文章
- Sersync实现触发式文件同步
- openstack icehouse版本glance上传镜像
- 图解Transformer-一篇文章看懂transformer
- OC基础--成员变量的封装
- CSS3特效 - 呼吸灯效果
- Android NDK开发篇(四):Java与原生代码通信(原生方法声明与定义与数据类型)
- 【P1714】切蛋糕(单调队列)
- 微软想通了?Windows 11恢复一键改变默认浏览器功能
- 百度站内搜索应该注意哪些方面?
- /proc/sys目录下文件的查看方法
- VS Code中powershell无法运行cnpm, vue等命令
- 改MD5防止你的视频被百度云秒和谐
- R语言之dpqr概率函数
- java timeunit_java – 了解TimeUnit
- linux系统微内核,微内核操作系统的定义及用微内核设计的系统,附Linux是单内核结构介绍...
- Maven(m2e)集成之二
- win10开机有东西一闪而过_Win10 开机以后不一会儿会弹出一个黑框,usoclient.exe 一闪而过。这东西对电脑有...
- 妈,别再乱买保健品了!
- 固态硬盘之模组(成品)厂商
- 树莓派系统安装资源和步骤说明