springmvc使用的是Hibernate Validator(和Hibernate的ORM无关)来完成校验功能

一.普通校验

  1.导入jar包

  2.编写校验错误配置文件

  3.配置校验错误信息文件

     <bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!-- 资源文件名,这里property的name为basenames所以错误信息的配置文件CustomValidationMessages省去后缀 -->
<property name="basenames">
<list>
<value>classpath:ItemValidationMessages</value>
</list>
</property>
<!-- 资源文件编码格式 -->
<property name="fileEncodings" value="UTF-8" />
<property name="defaultEncoding" value="UTF-8"/>
<!-- 对资源文件内容缓存时间,单位秒 -->
<property name="cacheSeconds" value="120" />
</bean>

  4.配置校验器

        <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<!-- 指定校验器提供方 -->
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
<!-- 指定校验使用的资源文件,如果不指定默认使用classpath下的ValidationMessages.properties -->
<property name="validationMessageSource" ref="messageSource"/>
</bean>

  5.将校验器注入到适配器中

           <!-- 使用<mvc:annotation-driven>可以代替单个配置注解映射器和注解适配器 ,它默认加载很多参数绑定方法
比如json转换解析器就默认加载了,实际开发用这个
validator="":校验器注入到适配器中-->
<!-- 默认的注解映射的支持 -->
<mvc:annotation-driven validator="validator"></mvc:annotation-driven>

  6.类属性中定义规则

    @Size(min=1,max=30,message="{item.itemname.length.erro}")
private String itemname; @NotNull(message="{item.price.isNULL}")
private Double price;

  7.在controller中处理数据错误

    /*1.在需要校验的pojo前边添加注解@Validated,在需要校验的pojo后面添加BindingResult bindingResult接收校验出错信息
注意:@Validated和BindingResult bindingResult是配对出现的,并且形参顺序是固定的(一前一后)
value={ItemGroup1.class}:指定使用ItemGroup1的分组校验*/
@RequestMapping("/editItemSubmit")
public ModelAndView editItemSubmit(HttpServletRequest request,@Validated(value={ItemGroup1.class}) ItemCustom itemCustom, BindingResult bindingResult) throws Exception{
//如果有错误
if(bindingResult.hasErrors()) {
//获取错误信息
List<ObjectError> allErrors = bindingResult.getAllErrors();
ModelAndView modelAndView = new ModelAndView();
//将错误信息传到jsp页面中
modelAndView.addObject("allErrors", allErrors);
modelAndView.setViewName("item/editItem");
return modelAndView;
}

      itemService.updateItem(itemCustom);
      ModelAndView modelAndView = new ModelAndView("redirect:/item/queryItems.action");
      return modelAndView;

  }

  8.测试

二.分组校验

    分组校验其实就是为了我们的校验更加灵活,有的时候,我们并不需要把我们当前配置的属性都进行校验,而需要的是当前的方法仅仅校验某些的属性。那么此时,我们就可以用到分组校验了...

  1.定义分组的接口【主要是标识】

    

  2.定于校验规则属于哪一各组

        groups:指定此校验属性属于哪个分组(接口)

    @Size(min=1,max=30,message="{item.itemname.length.erro}",groups={ItemGroup1.class,ItemGroup2.class})
private String itemname; @NotNull(message="{item.price.isNULL}",groups={ItemGroup2.class})
private Double price;

   

  3.在Controller方法中定义使用校验分组

  红色部分:@Validated(value={ItemGroup1.class})
  @RequestMapping("/editItemSubmit")
public ModelAndView editItemSubmit(HttpServletRequest request,
@ModelAttribute("itemCustom") @Validated(value={ItemGroup1.class}) ItemCustom itemCustom, BindingResult bindingResult,MultipartFile item_pic) throws Exception{

最新文章

  1. hzwer模拟赛 Hzwer的陨石
  2. 在CSDN中添加友情连接
  3. html5 filereader读取流注意事项
  4. JavaScript高级 函数表达式 《JavaScript高级程序设计(第三版)》
  5. N皇后问题--回溯法
  6. Spark wordcount 编译错误 -- reduceByKey is not a member of RDD
  7. Lambda表达式 =&gt;(msdn)
  8. HDOJ-ACM1022(JAVA)
  9. modelsim打开.wlf文件的方法(原创)
  10. gettid()和pthread_self()的区别
  11. JAVA常用类库简介(转)
  12. 生成php所需要的APNS Service pem证书的步骤
  13. C# FileSystemWatcher 监视磁盘文件
  14. CF 299 div2 C 博弈
  15. servlet中的过滤器 国际化
  16. [转帖]Docker 清理占用的磁盘空间
  17. 从unity丢图标到unity进不去桌面
  18. vue中使用第三方UI库的移动端rem适配方案
  19. Object value iterator:值迭代器
  20. Charles 网络抓包工具

热门文章

  1. ycsb 测试Hbase性能
  2. 对于jenkins上前端项目 npm 或 yarn 打包 及 部署 使用
  3. DockerFlie的基本命令解析
  4. JS简单数据类型
  5. flex三个对齐属性的记忆方式
  6. JavaScript中的循环和闭包
  7. Oracle 11g DATAGUARD 同步延时监控脚本
  8. jQuery实现简单的tab切换
  9. docker 网络设置概述
  10. Linux:用户权限管理