• Spring3.x JSR-303


    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类:

    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. }  
    页面请求的方法:
    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" />
  • 相关阅读:
    day74test
    day73
    drf节流
    drf面试题及总结
    day72test
    日常积累
    windows 内核下获取进程路径
    转:浅析C++中的this指针
    vc 获取窗口标题GetWindowText
    驱动自定义回调例程
  • 原文地址:https://www.cnblogs.com/baobeiqi-e/p/9884796.html
Copyright © 2020-2023  润新知