spring注解式参数校验
转载自 https://blog.csdn.net/jinzhencs/article/details/51682830
一般入参我们都会转为vo对象。那么直接在对象的属性上注解即可。
其实spring用的是hibernate的validator.
步骤
1.配置spring.xml
<mvc:annotation-driven />
2.配置自己的validate类。
<bean id="validateArgsAOP" class="com.my.validate.aop.ValidateArgsAOP"/><aop:config><aop:aspect id="argAOP" ref="validateArgsAOP"><aop:pointcut id="target" expression="execution(* com.wlqq.apigateway..*Controller.*(..))"/><aop:around method="doAround" pointcut-ref="target"/></aop:aspect></aop:config>
3.controller的bean加上@Valid
@RequestMapping(value=”/template”, method = RequestMethod.POST)
@ResponseBody
public JSONObject create(@RequestBody @Valid User json) {
}
4.bean上加注解验证
@NotBlank
private String name;
5.自定义全局异常捕获异常
因为我自定义的validator类校验缺少参数直接抛出异常,所以需要自定义全局异常捕获到这个异常,然后返回给前端 : 缺少必要参数。
http://blog.csdn.net/jinzhencs/article/details/51700009
注意:
前4步缺一不可,之前我是缺少了第三步,没有自己配置自己的validator。搞了半天没成功。
另外网上都是配置一个validator类,然后主动在controller去validator,这点肯定不如使用spring提供给我们的aop来的好。
示例:
1.验证用户名的格式
@NotBlank(message = "用户名不能为空")
@Length(min=5, max=20, message="用户名长度必须在5-20之间")
@Pattern(regexp = "^[a-zA-Z_]\\w{4,19}$", message = "用户名必须以字母下划线开头,可由字母数字下划线组成")
private String username;
2.验证必须为int且范围在 A-B之间
@Range(min=0, max=4)
private int scale;//基础规格
3.验证List不为空
@NotEmpty
private List<UserInfo> userList;
4.对象内包含List<对象>的校验
@Valid
@NotEmpty
private List<UserInfo> userList; 这样即可以实现对list里面的对象的校验了
规则:
@AssertFalse | Boolean,boolean | 验证注解的元素值是false |
---|---|---|
@AssertTrue | Boolean,boolean | 验证注解的元素值是true |
@NotNull | 任意类型 | 验证注解的元素值不是null |
@Null | 任意类型 | 验证注解的元素值是null |
@Min(value=值) | BigDecimal,BigInteger, byte,short, int, long,等任何Number或CharSequence(存储的是数字)子类型 | 验证注解的元素值大于等于@Min指定的value值 |
@Max(value=值) | 和@Min要求一样 | 验证注解的元素值小于等于@Max指定的value值 |
@DecimalMin(value=值) | 和@Min要求一样 | 验证注解的元素值大于等于@ DecimalMin指定的value值 |
@DecimalMax(value=值) | 和@Min要求一样 | 验证注解的元素值小于等于@ DecimalMax指定的value值 |
@Digits(integer=整数位数, fraction=小数位数) | 和@Min要求一样 | 验证注解的元素值的整数位数和小数位数上限 |
@Size(min=下限, max=上限) | 字符串、Collection、Map、数组等 | 验证注解的元素值的在min和max(包含)指定区间之内,如字符长度、集合大小 |
@Past | java.util.Date,java.util.Calendar;Joda Time类库的日期类型 | 验证注解的元素值(日期类型)比当前时间早 |
@Future | 与@Past要求一样 | 验证注解的元素值(日期类型)比当前时间晚 |
@NotBlank | CharSequence子类型 | 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的首位空格 |
@Length(min=下限, max=上限) | CharSequence子类型 | 验证注解的元素值长度在min和max区间内 |
@NotEmpty | CharSequence子类型、Collection、Map、数组 | 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0) |
@Range(min=最小值, max=最大值) | BigDecimal,BigInteger,CharSequence, byte, short, int, long等原子类型和包装类型 | 验证注解的元素值在最小值和最大值之间 |
@Email(regexp=正则表达式,flag=标志的模式) | CharSequence子类型(如String) | 验证注解的元素值是Email,也可以通过regexp和flag指定自定义的email格式 |
@Pattern(regexp=正则表达式,flag=标志的模式) | String,任何CharSequence的子类型 | 验证注解的元素值与指定的正则表达式匹配 |
@Valid | 任何非原子类型 | 指定递归验证关联的对象;如用户对象中有个地址对象属性,如果想在验证用户对象时一起验证地址对象的话,在地址对象上加@Valid注解即可级联验证 |
参考:
http://jinnianshilongnian.iteye.com/blog/1733708:Spring参数验证
spring注解式参数校验相关推荐
- Spring基础系列-参数校验
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9953744.html Spring中使用参数校验 概述 JSR 303中提出了Bea ...
- SpringBoot @Validated注解实现参数校验
1. 前言 做web开发有一点很烦人就是要校验参数,基本上每个接口都要对参数进行校验,比如一些格式校验 非空校验都是必不可少的.如果参数比较少的话还是容易 处理的一但参数比较多了的话代码中就会出现大量 ...
- @valid注解_springboot使用自定义注解对接口参数校验
目的: 对自定义注解有更好的认识,让参数校验变得更加简洁.灵活.方便. 正文: 首先,在pom文件引入hibernate的校验依赖 1.自定注解:(注意要加@Constraint约束) @Target ...
- 自定义检验注解_多注解自定义参数校验
好久直接更新了单个注解参数校验以后.偷懒了好久,今天就把多个注解自定义的参数校验写了一下,思路是一样的,只是一个注解包含的字段把它分解成了多个注解,类似于java-valid自带的不同功能的校验注解一 ...
- 一行代码引发的思考 之 @Tranactional(Spring注解式事务)
一.假设一个一个业务场景 SSM框架,MySQL数据库InnoDB存储引擎 某个业务需要将student表中student_id = 3 的 type 修改成 1,条件是这个学生所在班级的其它学生的t ...
- mybatis if test 判断参数_什么?你还在if判断参数?Spring Boot 注解进行参数校验真香...
一.依赖 org.springframework.bootspring-boot-starter-validation2.3.3.RELEASE 二.实体类 @TableField("use ...
- notnull注解_参数校验注解Validated和Valid的区别,这次终于有人说清楚了
Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303规范,是标准JSR-303的一个变种),javax提供了@Valid(标准JSR- ...
- postmapping注解参数说明_这么写参数校验(validator)就不会被劝退了~
作者: 锦成同学http://juejin.im/post/5d3fbeb46fb9a06b317b3c48 整理:后端技术精选 很痛苦遇到大量的参数进行校验,在业务中还要抛出异常或者不断的返回异常时 ...
- 参数校验(Validator)
为什么要用validator 实战演练 1. @Validated 声明要检查的参数 2. 对参数的字段进行注解标注 3. 在全局校验中增加校验异常 4. 测试 自定义参数注解 1. 比如我们来个 自 ...
最新文章
- Lintcode: Kth Smallest Number in Sorted Matrix
- 老师学python可以干嘛-Python除了爬虫,还能干啥?
- MySQL - 剖析MySQL索引底层数据结构
- php无法写入word文档,PHP生成WORD文档的问题
- 时钟切换处理(Verilog)
- CF 1529C Parsa‘s Humongous Tree
- 如何在WinForm中发送HTTP请求
- oracle中修改多个字段默认值_利用VBA代码在已有的数据表中删除、添加、修改字段...
- 属于哪个单元_1~6年级上册数学第一单元知识整理
- Python:Numpy库中的invert()函数的用法
- 浅谈代码审计入门实战:某博客系统最新版审计之旅
- Linux 2038年问题
- fw300r虚拟服务器设置,迅捷(FAST)FW300R无线路由器怎么设置
- 第七章 Scala基础——类继承
- 如何用计算机制作海报,稿定设计如何制作海报 一键生成海报的方法
- 女明星对比潮人HOLD姐的妖艳妆容
- 经典管理学定律4 - 鲶鱼效应
- Crack:GrapeCity Documents for Excel 6.0.1
- 1056: 兔子繁殖问题
- 1024程序员节?我们整点AI绘图玩玩吧,一文教你配置stable-diffusion