前言

我们都知道 springMvc 的检验框架使用的是 hibernatevalidator ,检验数据,是有那么一点小爽快;

但是,validator 提供的注解,总有那么一点不能适应我们的需求的;

比如前台传来一个 User 对象,我们对其各个字段进行校验,validator 本身已经有诸多的注解来完成校验了,但是需要对 用户ID 进行校验,也就是对 基本数据类型 进行校验,没有找到合适的注解;


自定义校验注解

实现对 int 类型数据进行校验,其中校验规则,自定义,我这里设定的是,根据传入的 min 和 max 判定是否满足条件

default 的含义是,如果此属性在注解中,没有明确的赋值,则使用在开发注解的时候的赋予的默认值;

@Documented
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = { IntegerValidImpl.class})
public @interface IntegerValid {
// 在注解没有显示申明,则min值默认是 0
int min() default 0;
// 在注解没有显示申明,则min值默认是 2147483647
int max() default 2147483647;
// 错误信息
String message() default "{不合法的int}";
// 分组信息
Class<?>[] groups() default {};
// 不知道是干嘛的。。。
Class<? extends Payload>[] payload() default {};
} /**
* 自定义类,用于对校验注解规则的实现
* 实现 ConstraintValidator 接口,泛型,第一个是对什么注解进行实现,第二个是检验的数据的数据类型 ;
*/
class IntegerValidImpl implements ConstraintValidator<IntegerValid, Integer> { private int min;
private int max; /**
* 初始化方法,在里面进行一些设定,我在这里获取注解中属性值,方法参数,就是上面泛型参数的第一个参数 ;
*/
@Override
public void initialize(IntegerValid integerValid) {
max = integerValid.max();
min = integerValid.min();
} /**
* 第一个参数,就是泛型参数的第二个参数 ;
*
* 进行检验,返回 false 代表校验没通过,返回 true 代表校验通过
*/
@Override
public boolean isValid(Integer integer, ConstraintValidatorContext constraintValidatorContext) { if (null == integer) {
return false;
} else if (integer > max || integer < min) {
return false;
}
return true;
}
}

其中自定义 校验 注解 (看仔细了,不是自定义注解,是自定义检验注解) 的时候,message() ,groups() ,payload() 三个是必须有的;

其他属性根据自己需要进行添加,我这里添加了两个: min max

类上的注解:

@Documented
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = { IntegerValidImpl.class})

前三个是 java元注解

从上往下,依次是:

  1. @Documented

    表示定义的注解将被包含在 javadoc

  2. @Target

    定义的注解,可以使用在什么地方,这里可以使用在方法和字段上;

  3. @Retention

    表示定义的注解的保存策略,这里是在运行时也保存,这样可以通过反射获取到 ;

最后一个是 javax.validation 的注解 ,表示该注解的检验规则,有哪一个类实现;


使用

 	@IntegerValid(min = 9,max = 12,message = "{user.id.illegal}",groups = {Second.class})
private Integer userId;

后记

没有后记,下午头疼。。

自定义注解扩展springMvc的validation注解的更多相关文章

  1. Spring Boot Validation,既有注解不满足,我是怎么暴力扩展validation注解的

    前言 昨天,我开发的代码,又收获了一个bug,说是界面上列表查询时,正常情况下,可以根据某个关键字keyword模糊查询,后台会去数据库 %keyword%查询(非互联网项目,没有使用es,只能这样了 ...

  2. SpringMVC之基于注解的Controller

    参考博客:https://www.cnblogs.com/qq78292959/p/3760560.html Controller注解: 传统风格的Controller需要实现Controller接口 ...

  3. SpringMVC札集(03)——基于注解的SpringMVC入门完整详细示例

    自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...

  4. springMVC+springJDBC+Msql注解模式

    最近基于Spring4.X以上的版本写了一个springMVC+springJDBC+Msql注解模式的一个项目,之中也遇到过很多问题 ,为了防止以后遇到同样问题现记录一下知识点以及详细配置. 首先我 ...

  5. SpringMVC使用@Valid注解进行数据验证

    SpringMVC使用@Valid注解进行数据验证   from:https://blog.csdn.net/zknxx/article/details/52426771 我们在做Form表单提交的时 ...

  6. 基于注解的springmvc开发

    原理简析 1. 背景知识:org.springframework.web.ServletContainerInitializer接口 在基于注解的servlet开发中,ServletContainer ...

  7. Spring SpringMVC SpringBoot SpringCloud 注解整理大全

    Spring SpringMVC SpringBoot SpringCloud 注解整理 才开的博客所以放了一篇以前整理的文档,如果有需要添加修改的地方欢迎指正,我会修改的φ(๑˃∀˂๑)♪ Spri ...

  8. Spring|SpringMVC中的注解

    文章目录 一.Spring注解 @Controller @ResuController @Service @Autowired @RequestMapping @RequestParam @Model ...

  9. 基于注解的SpringMVC

    相比传统的继承Controller体系中某些类的方式,SpringMVC的注解具有以下优点: 1.Controller不再需要继承某个特定类,只是简单的POJO. 2.请求映射的配置非常方便灵活. 3 ...

随机推荐

  1. SQL优化(子文章)(持续更新)

    -----> 总文章 入口 文章目录 [-----> 总文章 入口](https://blog.csdn.net/qq_37214567/article/details/90174445) ...

  2. Android中为何使用Log而不用System.out

    Android中为何使用Log而不用System.out System.out除了使用方便一点以外有以下缺点:日志不可控制,打印时间无法确定,不能添加过滤器,日志没有级别之分. 使用Log比如想打印一 ...

  3. Kafka的Topic、Partition和Message

    Kafka的Topic和Partition Topic Topic是Kafka数据写入操作的基本单元,可以指定副本 一个Topic包含一个或多个Partition,建Topic的时候可以手动指定Par ...

  4. gogs 实现webhook钩子(php接口形式)

    1.概要流程 2.准备工作 gogs服务器 linux网站服务器(宝塔) 本地客户端 3.编写钩子访问的接口 在public下新建githook.php文件,代码如下: <?php $cmd = ...

  5. GIS地理工具案例教程——合并选中图层

    GIS地理工具案例教程--合并选中图层 商务合作,科技咨询,版权转让:向日葵,135-4855__4328,xiexiaokui#qq.com 功能:并图层列表中 描述:对图层列表中选中图层进行合并. ...

  6. python 设计模式之桥接模式 Bridge Pattern

    #写在前面 前面写了那么设计模式了,有没有觉得有些模式之间很类似,甚至感觉作用重叠了,模式并不是完全隔离和独立的,有的模式内部其实用到了其他模式的技术,但是又有自己的创新点,如果一味地认为每个模式都是 ...

  7. Flutter -------- 网络请求之HttpClient

    今天来说说Flutter中的网络请求,HttpClient网络请求,包含get,post get var data; _get() async { Map newTitle; var response ...

  8. flutter Checkbox 复选框组件

    import 'package:flutter/material.dart'; class CheckboxDemo extends StatefulWidget { @override _Check ...

  9. spark sql插入表时的文件个数研究

    spark sql执行insert overwrite table时,写到新表或者新分区的文件个数,有可能是200个,也有可能是任意个,为什么会有这种差别? 首先看一下spark sql执行inser ...

  10. 算法习题---5-3卡牌游戏(UVa10935)

    一:题目 给定n张卡片,按照1-n的顺序编号,然后拿出一张卡片扔掉,拿出一张卡片放到最后,重复该操作直到只剩1张卡片. 求扔掉的卡片序列和最后剩的卡片的编号. (一)样例输入 7 //卡牌编号从1到7 ...