springMVC-validation校验

一,环境准备

在这里插入图片描述

二,配置校验器

在springmvc.xml中配置校验器

<!-- 校验器 -->
	  <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
	      <property name="providerClass"  value="org.hibernate.validator.HibernateValidator"/>
	      <!--指定校验使用的文件,在文件中配置配置校验错误信息,不设置则默认为classpath下的 ValidationMessages.properties -->
	      <property name="validationMessageSource" ref="validatemessageSource"/>
	  </bean>	

	   <!-- 校验错误信息配置文件 -->
	  <bean id="validatemessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">  
	  	  <!-- 资源文件名 -->
	      <property name="basename">
	      	<list>	
	      		<value>classpath:CustomValidationMessages</value>
	      	</list>	
	      </property>  
	      <!-- 资源文件编码格式 -->
	      <property name="fileEncodings" value="utf-8" />
	      <!-- 默认编码:一定要配置这个,要不然会出现乱码 -->
	      <property name="defaultEncoding" value="utf-8" />
	      <!-- 对资源文件缓存时间,单位秒 -->  
	      <property name="cacheSeconds" value="120"/>  
	  </bean>

三,注入适配器中

<!--开启注解扫描,并将校验器注入到适配器中-->
  <mvc:annotation-driven conversion-service="conversionService" validator="validator"></mvc:annotation-driven>

四,在pojo中添加校验规则

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class Items {
    private Integer id;
    
    //校验信息 商品名字在1-30个字符之间
    @Size(min=1,max=30,message="{items.name.longError}")
    private String name;

    private Float price;

    private String pic;
    //校验信息 生成日期不能为空
    @NotNull(message="{items.createtime.NullError}")
    private String createtime;

    private String detail;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    public Float getPrice() {
        return price;
    }

    public void setPrice(Float price) {
        this.price = price;
    }

    public String getPic() {
        return pic;
    }

    public void setPic(String pic) {
        this.pic = pic == null ? null : pic.trim();
    }

    public String getCreatetime() {
        return createtime;
    }

    public void setCreatetime(String createtime) {
        this.createtime = createtime;
    }

    public String getDetail() {
        return detail;
    }

    public void setDetail(String detail) {
        this.detail = detail == null ? null : detail.trim();
    }
}

五,配置validation的配置文件CustomValidationMessages.properties

可以在文件中配置错误信息,也可以在pojo类中添加校验信息的时候,在message中配置错误信息:如@Size(min=1,max=30,message=“商品名字不规范”).但一般不推荐这种方法,而在配置文件中配置错误信息

# 配置错误信息
items.name.longError =  商品名字长度不规范
items.createtime.NullError = 商品生成日期不能为空

六,捕获校验错误信息

//商品信息修改提交
   //在需要校验的pojo前添加@Validated,在需要校验的pojo后面添加BindingResult,接收校验出错信息
   //注意@Validated,BindingResul是配对出现的,并且必须一个在前一个在后,有多少个需要校验的pojo就需要多少对@Validated BindingResul
   @RequestMapping("/editItemsSubmit")
   public String editItemsSubmit(Model model,
	   @Validated ItemsCustom itemsCustom ,BindingResult bindingResult) throws Exception{
       
       //获取校验错误信息
       if(bindingResult.hasErrors()){
	   List<ObjectError> objectErrors =  bindingResult.getAllErrors();
	   
	   //输出错误
	   for (ObjectError objectError : objectErrors) {
	       System.out.println(objectError.getDefaultMessage());
	   }
	   //将错误信息传到页面
	   model.addAttribute("itemsErrors", objectErrors);
	   //返回修改页面
	   return "forward:editItems.action";
       }

       //修改商品信息
       ItemsService.updateItems(itemsCustom);
       //页面转发
       return "forward:queryItems.action";
       
   }

七,分组校验

在pojo中定义校验规则,而pojo被多个controller所共用,不同的controller方法对同一个pojo进行校验,但每个方法需要不同的校验.所以需要将校验规则进行分组

创建接口

public interface ValidGroupOne {
    //接口不需要定义任何方法,仅对不同的校验规则进行分组
    //此组只校验商品的长度
}

在pojo中添加分组
在这里插入图片描述

在controller方法中使用指定的分组校验
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值