zoukankan      html  css  js  c++  java
  • ssm中使用hibernate-validator验证BO

    目前比较流行的验证做法:前端jquery-form-validate + 后端hibernate-validate

    在pom中添加相关jar:

    <!-- use hibernate-validator to validate entity before enter controller -->
                <dependency>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-validator</artifactId>
                    <version>${hibernate.version}</version>
                </dependency>
                <dependency>
                    <groupId>javax.validation</groupId>
                    <artifactId>validation-api</artifactId>
                    <version>${validation.api.version}</version>
                </dependency>

    spring mvc中配置:

     1 <!-- 国际化配置 -->    
     2     <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />
     3     <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
     4         <property name="basenames">
     5             <list>
     6                 <value>classpath:resource/ValidationMessages</value>
     7             </list>
     8         </property>
     9         <property name="useCodeAsDefaultMessage" value="true" />
    10     </bean>
    11     
    12     
    13     <!-- 注册验证器 -->
    14     <mvc:annotation-driven validator="validator" />
    15     
    16     <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    17         <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
    18         <!--这里配置将使用上面国际化配置的messageSource -->
    19         <property name="validationMessageSource" ref="messageSource" />
    20     </bean>

    配置错误信息:(当然也可以直接写在javabean中)

    1 val.age.message=u5E74u9F84u4E0Du80FDu8D85u8FC720u5C81
    2 
    3 username.not.null=u7528u6237u540Du4E0Du80FDu4E3Au7A7A
    4 pwd.not.null=u5BC6u7801u4E0Du80FDu4E3Au7A7A
    5 username.length=u7528u6237u540Du6700u5927u4E0Du80FDu8D85u8FC7{max},u6700u5C0Fu4E0Du80FDu5C11u4E8E{min}
    6 
    7 email.format.error=u90AEu7BB1u683Cu5F0Fu4E0Du6B63u786E
    8 
    9 title.not.null=u63A8u9001u4E3Bu9898u4E0Du80FDu4E3Au7A7A

    entity(setter getter 略):

     1 public class ValBean {
     2     
     3     
     4     /**
     5      * Bean Validation 中内置的 constraint       
     6      * @Null   被注释的元素必须为 null       
     7      * @NotNull    被注释的元素必须不为 null       
     8      * @AssertTrue     被注释的元素必须为 true       
     9      * @AssertFalse    被注释的元素必须为 false       
    10      * @Min(value)     被注释的元素必须是一个数字,其值必须大于等于指定的最小值       
    11      * @Max(value)     被注释的元素必须是一个数字,其值必须小于等于指定的最大值       
    12      * @DecimalMin(value)  被注释的元素必须是一个数字,其值必须大于等于指定的最小值       
    13      * @DecimalMax(value)  被注释的元素必须是一个数字,其值必须小于等于指定的最大值       
    14      * @Size(max=, min=)   被注释的元素的大小必须在指定的范围内       
    15      * @Digits (integer, fraction)     被注释的元素必须是一个数字,其值必须在可接受的范围内       
    16      * @Past   被注释的元素必须是一个过去的日期       
    17      * @Future     被注释的元素必须是一个将来的日期       
    18      * @Pattern(regex=,flag=)  被注释的元素必须符合指定的正则表达式       
    19      * Hibernate Validator 附加的 constraint       
    20      * @NotBlank(message =)   验证字符串非null,且长度必须大于0       
    21      * @Email  被注释的元素必须是电子邮箱地址       
    22      * @Length(min=,max=)  被注释的字符串的大小必须在指定的范围内       
    23      * @NotEmpty   被注释的字符串的必须非空       
    24      * @Range(min=,max=,message=)  被注释的元素必须在合适的范围内 
    25      */
    26     private Long id;
    27 
    28     @Max(value=20, message="{val.age.message}")   
    29     private Integer age;
    30     
    31     @NotBlank(message="{username.not.null}")
    32     @Length(max=6, min=3, message="{username.length}")
    33     private String username;
    34 
    35     @NotBlank(message="{pwd.not.null}")
    36     @Pattern(regexp="/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,10}$/", message="密码必须是6~10位数字和字母的组合")
    37     private String password;
    38     
    39     
    40     @Pattern(regexp="^((13[0-9])|(15[^4,\D])|(18[0,5-9]))\d{8}$", message="手机号格式不正确")
    41     private String phone;
    42 
    43     @Email(message="{email.format.error}")
    44     private String email;
    45 }

    controller引用:

     1 @Controller
     2 @RequestMapping(value = "/val")
     3 public class ValidateController {
     4 
     5     @RequestMapping(value = "/val", method=RequestMethod.POST)
     6     @ResponseBody
     7     public LeeJSONResult val(@Valid @RequestBody ValBean bean, BindingResult result) throws Exception {
     8         
     9         if(result.hasErrors()){    
    10             //如果没有通过,跳转提示    
    11             Map<String, String> map = getErrors(result);
    12             return LeeJSONResult.error(map);
    13         }else{    
    14             //继续业务逻辑    
    15         } 
    16         
    17         return LeeJSONResult.ok();
    18     }
    19     
    20     private Map<String, String> getErrors(BindingResult result) {
    21         Map<String, String> map = new HashMap<String, String>();
    22         List<FieldError> list = result.getFieldErrors();
    23         for (FieldError error : list) {
    24             System.out.println("error.getField():" + error.getField());
    25             System.out.println("error.getDefaultMessage():" + error.getDefaultMessage());
    26             
    27             map.put(error.getField(), error.getDefaultMessage());
    28         }
    29         return map;
    30     }
    31     
    32 }

    done

  • 相关阅读:
    智能指针的简单实现
    原型模式
    Linux——模拟实现一个简单的shell(带重定向)
    软件开发的一个案例:学生信息管理系统
    关于正则的一点总结
    STL——模拟实现空间配置器
    LeetCode全文解锁 √
    话说extern和static
    C++有关 const & 内敛 & 友元&静态成员那些事
    C语——宏小结
  • 原文地址:https://www.cnblogs.com/leechenxiang/p/5546615.html
Copyright © 2011-2022 走看看