文档章节

使用SpringMVC的@Validated注解验证

 瑟青豆
发布于 06/22 20:07
字数 1450
阅读 14
收藏 20
点赞 0
评论 0

1、SpringMVC验证@Validated的使用

第一步:编写国际化消息资源文件

编写国际化消息资源ValidatedMessage.properties文件主要是用来显示错误的消息定制

 

[java] view plain copy

  1. edit.username.null=用户名不能为空  
  2. edit.password.size=密码最少{min}位,最长{max}位  
  3. ......  

可以将edit.username.null与edit.password.size看为参数,在message中传递,具体请看第二步。

 

第二步:Bean实体类中加注解

首先介绍关于验证注解的类型种类

 

@Null 限制只能为null
@NotNull 限制必须不为null
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future 限制必须是一个将来的日期
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Past 验证注解的元素值(日期类型)比当前时间早
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在min到max之间
@NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

使用 这些注解很简单,只需要在实体类中的变量属性前面加上该注解即可。

[html] view plain copy

  1. public class User {    
  2.     private String id;   
  3.     @NotEmpty(message = "{edit.username.null}")  
  4.     private String username;  
  5.     @Size(min=6 ,max= 20 ,message = "{edit.password.size}")  
  6.     private String password;  
  7.    ......  
  8. }  

其中{}相当于占位符,将min、max参数传图,同时也将消息文件中定制的错误信息传入,当然也可以直接不使用国际化文件,但是推荐使用,方便统一与修改。

 

[html] view plain copy

  1. public class User {    
  2.     private String id;   
  3.     @NotEmpty(message = "用户名不能为空")  
  4.     private String username;  
  5.     @Size(min=6 ,max= 20 ,message = "密码最少6位,最高20位")  
  6.     private String password;  
  7.    ......  
  8. }  

 

 

第三步:Controller层的编写


Controller层的使用,很简单。需要在相应的方法传入的Bean参数前面增加注解@Validated,还有增加BindingResult参数即可,具体请看代码示例:

[html] view plain copy

  1. @Controller    
  2. public class UserController {    
  3.     
  4.     @RequestMapping("/save")    
  5.     public String save(@Validated User user, BindingResult result) {    
  6.         if(result.hasErrors()) {    
  7.             return "error";    
  8.         }    
  9.         return "success";    
  10.     }    
  11. }  

 

第四步:在View层显示错误信息


这里就不做介绍了,实际项目中会封装好相应的javcscript等方法,只需要调用就可以返回页面提示给用户错误信息。
 

2、@Validated的分组特性


先在记录之前,介绍一下这样的场景:在对用户的帐号密码进行编辑保存以及新增是两种不一样的情况。

编辑修改->保存:只需要验证username与password是否符合条件即可,不需要验证id(因为在数据库中id已经存在)。

新增->保存:新增需要验证username与password是否符合条件,还要验证id。

这时候就用到groups分组分情况对Bean属性变量进行验证,也可以满足多验证。具体的需要一下两个步骤

第一步:创建分组接口类


分组接口类只是普通的接口类并没有多大意义,只是用来标识这个属性哪种情况下被验证,这类似于java.io.Serializable  
 

[html] view plain copy

  1. public interface addUser{   
  2. }   
  3. public interface editUser{  
  4. }  

 

第二步:Controller方法参数中增加xxx.class接口


在对新增的用户进行ID验证,增加@Validated({addUser.class})接口类用来表示新增的User.getId()需要验证。

[html] view plain copy

  1. @Controller    
  2. public class UserController {    
  3.     
  4.     @RequestMapping("/saveAdd")    
  5.     public String saveAddUser(@Validated({addUser.class}) User user, BindingResult result) {    
  6.         if(result.hasErrors()) {    
  7.             return "error";    
  8.         }    
  9.         return "success";    
  10.     }  

 

第三步:Bean中添加groups分组


在User实体类中添加groups分组@NotEmpty(groups={addUser.class})与UserController中@Validated({addUser.class})对应,说明在执行saveAddUser新增用户的情况下,才对新增的用户id进行验证。
 

 

[html] view plain copy

  1. public class User {     
  2.     //在分组addUser时,验证id不能为空,其他情况下不做验证  
  3.     @NotEmpty(groups={addUser.class})  
  4.     private String id;  
  5.     @NotEmpty(message = "用户名不能为空")  
  6.     private String username;  
  7.     @Size(min=6 ,max= 20 ,message = "密码最少6位,最高20位")  
  8.     private String password;  
  9.    ......  
  10. }  

以上三步就可以简单地完成分组验证,但是对分组验证补充一下三点:

第一是:不分配groups分组时,默认每次都需要验证。

第二是:通过groups分组可以对同一个变量进行多个验证,如下代码

[html] view plain copy

  1. //对用户名进行两次不同情况的验证。  
  2. @NotEmpty(groups={First.class})  
  3. @Size(min=1,max=10,groups={Second.class})  
  4. public String username;   


第三是:默认的情况下,不同的分组约束验证是无序的,但是在有些情况下验证的相互约束很重要(比如前一个组验证失败,后面的将不再验证等情况),所以groups分组的验证也有前后验证顺序。使用@GroupSequence注解进行排序。

[html] view plain copy

  1. /*  
  2.  * 分组顺序接口类  
  3.  */  
  4. import javax.validation.GroupSequence;  
  5. //分组序列先Frist再Second  
  6. @GroupSequence({First.class,Second.class})  
  7. public interface Group{  
  8. }  
  9.   
  10. @Controller    
  11. public class UserController {    
  12.     
  13.     @RequestMapping("/saveAdd")    
  14.     public String saveAddUser(@Validated({Group.class}) User user, BindingResult result) {    
  15.         if(result.hasErrors()) {    
  16.             return "error";    
  17.         }    
  18.         return "success";    
  19.     }  

© 著作权归作者所有

共有 人打赏支持
粉丝 2
博文 22
码字总数 38004
作品 0
石家庄
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC

Spring4新特性——泛型限定式依赖注入 Spring4新特性——核心容器的其他改进 Spring4新特性——Web开发的增强 Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC Spring4新特性...

咖啡杯
2014/02/18
0
0
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC

Spring4新特性——泛型限定式依赖注入 Spring4新特性——核心容器的其他改进 Spring4新特性——Web开发的增强 Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC Spring4新特性...

咖啡杯
2014/02/18
0
0
Spring Validation实现原理分析

最近要做动态数据的提交处理,即需要分析提交数据字段定义信息后才能明确对应的具体字段类型,进而做数据类型转换和字段有效性校验,然后做业务处理后提交数据库,自己开发一套校验逻辑的话周...

68号小喇叭
07/08
0
0
Spring中@Pattern的使用

Controller层 为Controller添加表示启用验证。 为Controller中特定请求添加正则表达式校验。 Json响应 总结 很方便,还可以自己捕获这个异常的对返回进行自定义处理。 参考: Spring Boot RES...

亚林瓜子
今天
0
0
springMVC 高级2 之 valadation

1 validation Spring3支持JSR-303验证框架,JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,官方参考实现是Hibernate Validator(与Hibernate ORM 没有关系),JSR 303 用于对J...

龙之天空
2015/11/16
0
0
数据验证框架 Apache BVal 简介(更新)

Apache BVal (源码)是实体数据验证 Java Bean Validation 的参考实现。Apache BVal 提供了 JSR 303 规范中所有内置 constraint 的实现,用于对 Bean 中的字段的值进行约束定义、描述和验证...

sp42
2016/01/28
0
0
整了一天的SpringMVC 3.1

其实之前使用过SpringMVC 3.0做过一个实验项目,发现很多问题,最明显的就是与Validation的问题,并没有考虑到分组校验,再者,就是FlashMessage实现的问题,这个得自己写,这个我确实花了一...

kut
2012/01/14
0
0
SpringMVC 支持Hibernate Validator

一、基础框架 SpringMVC-4.0.3.RELEASE,使用的maven来管理jar依赖 二、依赖的jar, <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <versio......

BravoZu
2014/08/04
0
4
Laravel 中的强大的tap你用过么

在本文,我们将讨论 Laravel 中的 。我们将详细讨论 帮助函数和 中的 方法。 Tap 帮助函数 旧的实现方式 Laravel提出了一个 功能。这是一个非常奇怪的功能,受Ruby的启发。这是 助手功能的基...

如来神掌
04/30
0
0
让Spring Controller 的方法基本数据类型参数支持Bean Validation

让Spring Controller 的方法基本数据类型参数支持Bean Validation Spring中的Bean Validation 我们知道Spring MVC层是默认可以支持Bean Validation的,尝试使用了一下感觉很不方便,只支持对...

ForEleven
2014/04/18
0
32

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vue-router懒加载

1. vue-router懒加载定义 当路由被访问的时候才加载对应组件 2. vue-router懒加载作用 当构建的项目比较大的时候,懒加载可以分割代码块,提高页面的初始加载效率。 ###3. vue-router懒加载实...

不负好时光
9分钟前
0
0
庆祝法国队夺冠:用Python放一场烟花秀

天天敲代码的朋友,有没有想过代码也可以变得很酷炫又浪漫?今天就教大家用Python模拟出绽放的烟花庆祝昨晚法国队夺冠,工作之余也可以随时让程序为自己放一场烟花秀。 这个有趣的小项目并不...

猫咪编程
11分钟前
0
0
SpringBoot | 第七章:过滤器、监听器、拦截器

前言 在实际开发过程中,经常会碰见一些比如系统启动初始化信息、统计在线人数、在线用户数、过滤敏高词汇、访问权限控制(URL级别)等业务需求。这些对于业务来说一般上是无关的,业务方是无需...

oKong
24分钟前
4
0
存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储

存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储 存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储。 顺序结构和链接结构适用在内存结构中。 顺序表每个单元都是按物理...

DannyCoder
35分钟前
1
0
Firefox 61已经为Ubuntu 提供支持

最新和最好的Mozilla Firefox 61 “Quantum”网络浏览器已经为Ubuntu Linux操作系统的用户提供了支持,现在可以通过官方软件库进行更新。 Mozilla于2018年6月26日发布了Firefox 61版本,该版...

六库科技
今天
0
0
Win10升级后执行系统封装(Sysprep)报错

开始封装 一年多以前开始给公司封装Win10系统,便于统一给公司电脑初始化携带各种软件的系统,致力于装完既可以开发的状态。那时候最新的版本是Win10 1703版本,自然就以他为母盘,然后结合V...

lyunweb
今天
40
0
php 性能优化

#什么情况下会遇到性能问题 PHP 语法使用的不恰当

to_be_better
今天
0
0
Jenkins 构建触发器操作详解

前言 跑自动化用例每次用手工点击jenkins出发自动化用例太麻烦了,我们希望能每天固定时间跑,这样就不用管了,坐等收测试报告结果就行。 一、定时构建语法 * * * * * (五颗星,中间用空格隔...

覃光林
今天
0
0
IDEA配置技巧

超详细设置Idea类注释模板和方法注释模板 idea去掉注解param下划线 JetBrains全系列破解

AK灬
今天
0
0
rsync通过服务同步/Linux系统日志/screen工具

rsync通过服务同步 分为服务端(机器A) 和客户端(机器B) 机器A操作编辑/etc/rsyncd.conf配置文件 [root@yolks1 ~]# vim /etc/rsyncd.conf 文件中添加以下配置 port=873 ...

Hi_Yolks
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部