转载自 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注解式参数校验相关推荐

  1. Spring基础系列-参数校验

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9953744.html Spring中使用参数校验 概述 ​ JSR 303中提出了Bea ...

  2. SpringBoot @Validated注解实现参数校验

    1. 前言 做web开发有一点很烦人就是要校验参数,基本上每个接口都要对参数进行校验,比如一些格式校验 非空校验都是必不可少的.如果参数比较少的话还是容易 处理的一但参数比较多了的话代码中就会出现大量 ...

  3. @valid注解_springboot使用自定义注解对接口参数校验

    目的: 对自定义注解有更好的认识,让参数校验变得更加简洁.灵活.方便. 正文: 首先,在pom文件引入hibernate的校验依赖 1.自定注解:(注意要加@Constraint约束) @Target ...

  4. 自定义检验注解_多注解自定义参数校验

    好久直接更新了单个注解参数校验以后.偷懒了好久,今天就把多个注解自定义的参数校验写了一下,思路是一样的,只是一个注解包含的字段把它分解成了多个注解,类似于java-valid自带的不同功能的校验注解一 ...

  5. 一行代码引发的思考 之 @Tranactional(Spring注解式事务)

    一.假设一个一个业务场景 SSM框架,MySQL数据库InnoDB存储引擎 某个业务需要将student表中student_id = 3 的 type 修改成 1,条件是这个学生所在班级的其它学生的t ...

  6. mybatis if test 判断参数_什么?你还在if判断参数?Spring Boot 注解进行参数校验真香...

    一.依赖 org.springframework.bootspring-boot-starter-validation2.3.3.RELEASE 二.实体类 @TableField("use ...

  7. notnull注解_参数校验注解Validated和Valid的区别,这次终于有人说清楚了

    Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303规范,是标准JSR-303的一个变种),javax提供了@Valid(标准JSR- ...

  8. postmapping注解参数说明_这么写参数校验(validator)就不会被劝退了~

    作者: 锦成同学http://juejin.im/post/5d3fbeb46fb9a06b317b3c48 整理:后端技术精选 很痛苦遇到大量的参数进行校验,在业务中还要抛出异常或者不断的返回异常时 ...

  9. 参数校验(Validator)

    为什么要用validator 实战演练 1. @Validated 声明要检查的参数 2. 对参数的字段进行注解标注 3. 在全局校验中增加校验异常 4. 测试 自定义参数注解 1. 比如我们来个 自 ...

最新文章

  1. Lintcode: Kth Smallest Number in Sorted Matrix
  2. 老师学python可以干嘛-Python除了爬虫,还能干啥?
  3. MySQL - 剖析MySQL索引底层数据结构
  4. php无法写入word文档,PHP生成WORD文档的问题
  5. 时钟切换处理(Verilog)
  6. CF 1529C Parsa‘s Humongous Tree
  7. 如何在WinForm中发送HTTP请求
  8. oracle中修改多个字段默认值_利用VBA代码在已有的数据表中删除、添加、修改字段...
  9. 属于哪个单元_1~6年级上册数学第一单元知识整理
  10. Python:Numpy库中的invert()函数的用法
  11. 浅谈代码审计入门实战:某博客系统最新版审计之旅
  12. Linux 2038年问题
  13. fw300r虚拟服务器设置,迅捷(FAST)FW300R无线路由器怎么设置
  14. 第七章 Scala基础——类继承
  15. 如何用计算机制作海报,稿定设计如何制作海报 一键生成海报的方法
  16. 女明星对比潮人HOLD姐的妖艳妆容
  17. 经典管理学定律4 - 鲶鱼效应
  18. Crack:GrapeCity Documents for Excel 6.0.1
  19. 1056: 兔子繁殖问题
  20. 1024程序员节?我们整点AI绘图玩玩吧,一文教你配置stable-diffusion

热门文章

  1. 两年前搭建的网狐系统
  2. base64编解码的类
  3. 设计模式---组合模式
  4. 万字长文|深入理解XDP全景指南
  5. 深入理解DPDK架构|经典PDF分享
  6. IETF访谈: HTTP/3全球份额持续增长,QUIC前景一片光明
  7. 容联雷辉:视频系统由标清进入到移动高清时代
  8. 低代码是什么?有什么优势
  9. NGINX-RTMP复杂度分析
  10. centos6.5 Building the main Guest Additions module