Spring3.x JSR-303

来源:互联网 发布:网络连接助手 编辑:程序博客网 时间:2024/05/29 15:42

JSR303介绍

JSR303-Bean Validation描述:This JSR will define a meta-data model and API for JavaBeanTM validation based on annotations, with overrides and extended meta-data through the use of XML validation descriptors. 为实体验证定义了元数据模型和API.默认的元数据模型是通过Annotations来描述的,也可以使用XML来重载或扩展。

Bean Validation API并不局限于应用程序的某一层或者哪种编程模型。Bean Validation可以被用在任何一层。

Spring3.x已提供对JSR303的支持。

JSR303常用注解说明:

@NotNull/@Null

验证字段:引用数据类型

注解说明:注解元素必须是非空或空

@Digits

验证字段:byte、short、int、long及各自的包装类型以及BigDecimal、BigInteger、String

注解说明:验证数字构成是否合法

属性说明:integer:指定整数部分数字位数,fraction:指定小数部分数字位数

@Future/Past

验证字段:java.util.Date,java.util.Calendar

注解说明:验证是否在当前系统时间之后/之前

@Max/@Min

验证字段:byte、short、int、long及对应的包装类型以及BigDecimal、BigInteger

注解说明:验证值是否小于等于最大指定整数值或大于等于最小指定整数值

@Pattern

验证字段:String

注解说明:验证字符串是否匹配指定的正则表达式

属性说明:regexp:匹配的正则表达式,flags:指定Pattern.Flag的数值,表示正则表达式的选项

@Size

验证字段:String、Collection、Map和数组

注解说明:验证元素大小是否在指定范围内

属性说明:max:最大长度,min:最小长度,message:提示信息,默认:{constraint.size}

@DecimalMax/@DecimalMin

验证字段:byte、short、int、long及对应的包装类型以及BigDecimal、BigInteger、String

属性说明:验证值是否小于等于最大指定小数值或大于等于最小指定小数值

@Valid

属性说明:验证值是否需要递归调用

例子:

下面的例子在Spring3.1中测试通过

需要导入jar:javax.validation-1.0.0.jar 和hibernate-validation-4.3.0.jar

User类:

[java] view plain copy
  1. /** 
  2.  * 用户 
  3.  *  
  4.  * @author Administrator 
  5.  */  
  6. public class User implements Serializable {  
  7.     private static final long serialVersionUID = 5383162329852182189L;  
  8.     @NotEmpty(message = "用户名不能为空"// hibernate的验证注解,因为Spring页面中文本传过来的都是空字符串而不是空内容  
  9.     @Id  
  10.     private String userName; // 用户名  
  11.     @Size(min = 5, max = 32, message = "密码长度应在5-32位之间")  
  12.     private String password; // 密码  
  13.     private String role; // 对应角色  
  14.     private String loginIP; // 登录Ip  
  15.   
  16.     /** 
  17.      * 得到用户名 
  18.      *  
  19.      * @return 用户名 
  20.      */  
  21.     public String getUserName() {  
  22.         return userName;  
  23.     }  
  24.   
  25.     /** 
  26.      * 设置用户名 
  27.      *  
  28.      * @param userName 
  29.      *            用户名 
  30.      */  
  31.     public void setUserName(String userName) {  
  32.         this.userName = userName;  
  33.     }  
  34.   
  35.     /** 
  36.      * 得到登陆密码 
  37.      *  
  38.      * @return 登陆密码 
  39.      */  
  40.     public String getPassword() {  
  41.         return password;  
  42.     }  
  43.   
  44.     /** 
  45.      * 设置登陆密码 
  46.      *  
  47.      * @param password 
  48.      *            登陆密码 
  49.      */  
  50.     public void setPassword(String password) {  
  51.         this.password = password;  
  52.     }  
  53.   
  54.     /** 
  55.      * 得到用户角色 
  56.      *  
  57.      * @return 用户角色 
  58.      */  
  59.     public String getRole() {  
  60.         return role;  
  61.     }  
  62.   
  63.     /** 
  64.      * 设置用户角色 
  65.      *  
  66.      * @param role 
  67.      *            用户角色 
  68.      */  
  69.     public void setRole(String role) {  
  70.         this.role = role;  
  71.     }  
  72.   
  73.     /** 
  74.      * 得到登录IP 
  75.      *  
  76.      * @return 登录IP 
  77.      */  
  78.     public String getLoginIP() {  
  79.         return loginIP;  
  80.     }  
  81.   
  82.     /** 
  83.      * 设置登录IP 
  84.      *  
  85.      * @param loginIP 
  86.      *            登录IP 
  87.      */  
  88.     public void setLoginIP(String loginIP) {  
  89.         this.loginIP = loginIP;  
  90.     }  
  91. }  
页面请求的方法:
[java] view plain copy
  1. public String login(@Valid User user, BindingResult result,  
  2.             HttpServletRequest request, Model model) {  
  3.         if (result.hasErrors()) {  
  4.             return "login";  
  5.         }  
  6. return "success"  
  7. }  

在配置文件中需要对验证对象所在包进行扫描

<property name="packagesToScan" value="package.path" />
0 0
原创粉丝点击