自定义注解扩展springMvc的validation注解
前言
我们都知道 springMvc
的检验框架使用的是 hibernate
的 validator
,检验数据,是有那么一点小爽快;
但是,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
的 元注解
;
从上往下,依次是:
@Documented
表示定义的注解将被包含在
javadoc
中@Target
定义的注解,可以使用在什么地方,这里可以使用在方法和字段上;
@Retention
表示定义的注解的保存策略,这里是在运行时也保存,这样可以通过反射获取到 ;
最后一个是 javax.validation
的注解 ,表示该注解的检验规则,有哪一个类实现;
使用
@IntegerValid(min = 9,max = 12,message = "{user.id.illegal}",groups = {Second.class})
private Integer userId;
后记
没有后记,下午头疼。。
自定义注解扩展springMvc的validation注解的更多相关文章
- Spring Boot Validation,既有注解不满足,我是怎么暴力扩展validation注解的
前言 昨天,我开发的代码,又收获了一个bug,说是界面上列表查询时,正常情况下,可以根据某个关键字keyword模糊查询,后台会去数据库 %keyword%查询(非互联网项目,没有使用es,只能这样了 ...
- SpringMVC之基于注解的Controller
参考博客:https://www.cnblogs.com/qq78292959/p/3760560.html Controller注解: 传统风格的Controller需要实现Controller接口 ...
- SpringMVC札集(03)——基于注解的SpringMVC入门完整详细示例
自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...
- springMVC+springJDBC+Msql注解模式
最近基于Spring4.X以上的版本写了一个springMVC+springJDBC+Msql注解模式的一个项目,之中也遇到过很多问题 ,为了防止以后遇到同样问题现记录一下知识点以及详细配置. 首先我 ...
- SpringMVC使用@Valid注解进行数据验证
SpringMVC使用@Valid注解进行数据验证 from:https://blog.csdn.net/zknxx/article/details/52426771 我们在做Form表单提交的时 ...
- 基于注解的springmvc开发
原理简析 1. 背景知识:org.springframework.web.ServletContainerInitializer接口 在基于注解的servlet开发中,ServletContainer ...
- Spring SpringMVC SpringBoot SpringCloud 注解整理大全
Spring SpringMVC SpringBoot SpringCloud 注解整理 才开的博客所以放了一篇以前整理的文档,如果有需要添加修改的地方欢迎指正,我会修改的φ(๑˃∀˂๑)♪ Spri ...
- Spring|SpringMVC中的注解
文章目录 一.Spring注解 @Controller @ResuController @Service @Autowired @RequestMapping @RequestParam @Model ...
- 基于注解的SpringMVC
相比传统的继承Controller体系中某些类的方式,SpringMVC的注解具有以下优点: 1.Controller不再需要继承某个特定类,只是简单的POJO. 2.请求映射的配置非常方便灵活. 3 ...
随机推荐
- SQL优化(子文章)(持续更新)
-----> 总文章 入口 文章目录 [-----> 总文章 入口](https://blog.csdn.net/qq_37214567/article/details/90174445) ...
- Android中为何使用Log而不用System.out
Android中为何使用Log而不用System.out System.out除了使用方便一点以外有以下缺点:日志不可控制,打印时间无法确定,不能添加过滤器,日志没有级别之分. 使用Log比如想打印一 ...
- Kafka的Topic、Partition和Message
Kafka的Topic和Partition Topic Topic是Kafka数据写入操作的基本单元,可以指定副本 一个Topic包含一个或多个Partition,建Topic的时候可以手动指定Par ...
- gogs 实现webhook钩子(php接口形式)
1.概要流程 2.准备工作 gogs服务器 linux网站服务器(宝塔) 本地客户端 3.编写钩子访问的接口 在public下新建githook.php文件,代码如下: <?php $cmd = ...
- GIS地理工具案例教程——合并选中图层
GIS地理工具案例教程--合并选中图层 商务合作,科技咨询,版权转让:向日葵,135-4855__4328,xiexiaokui#qq.com 功能:并图层列表中 描述:对图层列表中选中图层进行合并. ...
- python 设计模式之桥接模式 Bridge Pattern
#写在前面 前面写了那么设计模式了,有没有觉得有些模式之间很类似,甚至感觉作用重叠了,模式并不是完全隔离和独立的,有的模式内部其实用到了其他模式的技术,但是又有自己的创新点,如果一味地认为每个模式都是 ...
- Flutter -------- 网络请求之HttpClient
今天来说说Flutter中的网络请求,HttpClient网络请求,包含get,post get var data; _get() async { Map newTitle; var response ...
- flutter Checkbox 复选框组件
import 'package:flutter/material.dart'; class CheckboxDemo extends StatefulWidget { @override _Check ...
- spark sql插入表时的文件个数研究
spark sql执行insert overwrite table时,写到新表或者新分区的文件个数,有可能是200个,也有可能是任意个,为什么会有这种差别? 首先看一下spark sql执行inser ...
- 算法习题---5-3卡牌游戏(UVa10935)
一:题目 给定n张卡片,按照1-n的顺序编号,然后拿出一张卡片扔掉,拿出一张卡片放到最后,重复该操作直到只剩1张卡片. 求扔掉的卡片序列和最后剩的卡片的编号. (一)样例输入 7 //卡牌编号从1到7 ...