springmvc的@Validated注解使用

2018年5月11日08:50:10
  • A+
所属分类:SpringMVC

1. 校验的错误信息, 可以直接在bean属性上配置, 也可以在properties中配置。

2. 将校验器bean配置到注解驱动上

3. 在需要校验的pojo前边添加@Validated,在需要校验的pojo后边添加BindingResult bindingResult接收校验出错信息

注意:@Validated和BindingResult bindingResult是配对出现,并且形参顺序是固定的(一前一后)。

使用validated所需配置:

1. jar包

springmvc的@Validated注解使用

2. application.xml

  1.  <!-- validated 校验配置start -->
  2.     <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" >
  3.         <!-- 提供检验机制的类: 此处用的而是Hibernate校验器,但是跟Hibernate没有关系 -->
  4.         <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
  5.         <!-- 指定校验的使用的资源文件, 如果不需要额外的错误配置文件,就不用配置该属性,
  6.          在配置文件中配置k-v的错误提示信息,如果不指定则使用默认配置:classpath下的ValidationMessages.properties -->
  7.         <property name="validationMessageSource" ref="messoreSources" />
  8.     </bean>
  9.     <!--<span style="color:#ff0000;"> 额外错误信息文件配置</span> -->
  10.     <bean id="messoreSources" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
  11. <!--         错误信息资源文件, 不需要写后缀, 默认后缀为.properties -->
  12.         <property name="basenames">
  13.             <list>
  14.                 <value>classpath:testErrMessages</value>
  15.             </list>
  16.         </property>
  17. <!--         错误信息文件编码方式 -->
  18.         <property name="fileEncodings" value="utf-8" />
  19. <!--         错误信息文件缓存时间 -->
  20.         <property name="cacheSeconds" value="120" />
  21.     </bean>
  22.     <!-- validated 校验配置end  -->
  23.     <!-- 注解驱动,替换处理器映射器、处理器适配器 -->
  24.     <mvc:annotation-driven validator="validator" />

 

3. testErrMessage.properties文件

文件结构:

springmvc的@Validated注解使用

文件内容:

springmvc的@Validated注解使用

4. bean的配置, 省略get/set方法

  1. public class ValidBean {
  2. <span style="white-space:pre;"> </span>//直接配置错误信息
  3.     @NotBlank(message="用户名不能为空", groups= {UserGroup1.class})
  4.     private String name;
  5.     @Max(value=120, message="年龄最大为120")
  6.     private Integer age;
  7.     // 使用配置文件中的错误信息, properties中的key: message="{key}"。 {}:占位符
  8.     @NotBlank(message="{validator.user.address}")
  9.     private String address;
  10. }

5. controller

  1. @Controller
  2. @RequestMapping("/test/")
  3. public class ValidTestController {
  4.     /**
  5.      * 
  6.      * @desc: 校验没有分组的属性
  7.      * @auth: zona
  8.      * 2017年2月19日 下午2:35:42 
  9.      * @param bean
  10.      * @param bindingResult
  11.      * @return
  12.      */
  13.     @RequestMapping("valid")
  14.     @ResponseBody
  15.     public Result testValid(@Validated ValidBean bean, BindingResult bindingResult) {
  16.         Result result = new Result();
  17.         Map retMap = new HashMap();
  18.         StringBuilder sb = new StringBuilder();
  19.         if(bindingResult.hasErrors()) {
  20.             List<ObjectError> errors = bindingResult.getAllErrors();
  21.             for (ObjectError err : errors) {
  22.                 sb.append(err.getDefaultMessage()+";  ");
  23.             }
  24.             result.setErrInfo(sb.toString());
  25.             result.setErrNo(1);
  26.              return result;
  27.         }
  28.         retMap.put("bean", bean);
  29.         result.success();
  30.         result.setData(retMap);
  31.         return result;
  32.     }
  33.     /**
  34.      * 
  35.      * @desc: 仅对属于userGroup组的属性进行校验
  36.      * @auth: zona
  37.      * 2017年2月19日 下午2:37:03 
  38.      * @param bean
  39.      * @param bindingResult
  40.      * @return
  41.      */
  42.     @RequestMapping("group/valid")
  43.     @ResponseBody
  44.     public Result testGroupValid(@Validated(value=UserGroup1.class) ValidBean bean, BindingResult bindingResult) {
  45.         Result result = new Result();
  46.         Map retMap = new HashMap();
  47.         StringBuilder sb = new StringBuilder();
  48.         if(bindingResult.hasErrors()) {
  49.             List<ObjectError> errors = bindingResult.getAllErrors();
  50.             for (ObjectError err : errors) {
  51.                 sb.append(err.getDefaultMessage()+";  ");
  52.             }
  53.             result.setErrInfo(sb.toString());
  54.             result.setErrNo(1);
  55.              return result;
  56.         }
  57.         retMap.put("bean", bean);
  58.         result.success();
  59.         result.setData(retMap);
  60.         return result;
  61.     }
  62. }

测试结果:

只校验没有分组的属性

springmvc的@Validated注解使用

校验UserGroup1组的属性

springmvc的@Validated注解使用

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: