Validation(2)
一般入参我们都会转为vo对象。那么直接在对象的属性上注解即可。
其实spring用的是hibernate的validator.
步骤
1.配置spring.xml
<mvc:annotation-driven />
- 1
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注解即可级联验证 |
Validation(2)的更多相关文章
- SpringMVC 使用验证框架 Bean Validation(上)
SpringMVC 使用验证框架 Bean Validation(上) 对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证. ...
- Go Revel - Validation(验证)
Revel提供了内建函数用于验证参数.它提供了: 一个`Validation`上下文集合来管理验证错误信息(键与消息内容) 辅助函数用于检查数据并将错误信息放入上下文 一个模板函数用于从`Valida ...
- Validation(4)-临时
使用Hibernate-Validator优雅的校验参数 2019年01月01日 13:17:31 余生之君 阅读数:337 版权声明:本文为博主原创文章,未经博主允许不得转载. https:/ ...
- Validation(3)--全局参数异常校验捕获及返回XML解决
@RestControllerAdvice原创直接上代码,后面再说怎么用1.这个是一个Form,用来接收参数的,一个简单的NotEmpty注解校验,merchantName这个参数是必传的: pack ...
- Validation(1)
站在巨人的肩膀上 Java Bean Validation 最佳实践 参数校验是我们程序开发中必不可少的过程.用户在前端页面上填写表单时,前端js程序会校验参数的合法性,当数据到了后端,为了防止恶意操 ...
- Java web服务端参数校验Javax.validation (springboot)
一.基本使用 Javax.validation是spring集成自带的一个参数校验接口.可通过添加注解来设置校验条件. 下面以springboot项目为例进行说明.创建web项目后,不需要再添加其他的 ...
- Backbone笔记(续)
Backbone Bockbone 总览 Backbone 与 MVC 模式:解决某一类问题的通用方案 - 套路 MVC:一种架构模式,解耦代码,分离关注点 M(Model) - 数据模型 V(Vie ...
- eclipse工作区(workspace)常用设置(preferences)
切换工作区 新建一个作为工作区的文件夹 File -> Switch Workspace -> Other... -> browse,定位到新的指定工作区文件夹即可. 切换到新的工作 ...
- OpenID Connect Core 1.0(一)介绍
IdentityServer4是基于OpenID Connect and OAuth 2.0框架,OpenID Connect Core 1.0是IdentityServer4最重要的文档 By 道法 ...
随机推荐
- MongoDB 学习一
这一章,我们先介绍几个MongoDB的概念: 1.document: 它是MongoDB的基础数据单元,它大概等价于关系型数据库中的行. 2.collection: 可以想象成动态的表. 3.一个简单 ...
- No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).错误解决方法
targets ->build setting 下的 Build Active Architecture Only 设置 NO 就可以.
- 13.JavaScript 类
JavaScript 类 JavaScript 是面向对象的语言,但 JavaScript 不使用类. 在 JavaScript 中,不会创建类,也不会通过类来创建对象(就像在其他面向对象的语言中那样 ...
- oracle rac常用的网络检查命令
oracle的集群管理软件和数据库对私网依赖性很大,很多集群问题最后都可以归结到网络层面. 当集群出现问题时检查网络信息是必要的. 1.查看MTU的大小,确认所有节点的公网和私网网卡的MTU大小相同 ...
- [noip2014day1-T2]联合权值
无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi,每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 v 点的最短距离.对于图 G ...
- 青岛理工交流赛 H题 素数间隙
13110581088注销 素数间隙 Time Limit: 1000MS Memory limit: 262144K 题目描述 Neko猫是一个很喜欢玩数字游戏的会说话的肥猫,经常会想到很多很好玩的 ...
- 书写优雅的shell脚本(七)- ${COLUMN:-}
${COLUMN:-} 如果COLUMN是空变量,或者变量不存在,返回-后面的内容,如果变量有值返回这个值.
- 在CentOs6.x 安装Cx_oracle5.x
Setting up anything Oracle related is a huge pain. After hunting the web for info with minimal succe ...
- shiro加密简单实现
1.添加shiro依赖 定义shiro的版本号 <shiro.ver>1.2.3</shiro.ver> 加入shiro的依赖 <dependency> <g ...
- WinDbg 调试工具的使用
概述 项目接近尾声了,可是在运行时会有memory leak(内存泄露) bug.产品在运行一天后,内存增长致1.4G,而我们产品的初始内存才有70M,问题很严重,决定采用WinDbg工具来分析代码问 ...