Spring Validation 验证
阅读原文时间:2023年07月12日阅读:2

1.pom引入maven依赖

javax.validation validation-api 1.1.0.Final
org.hibernate hibernate-validator 5.4.0.Final

2.增加validation配置

在spring-mvc-servlet.xml中增加如下配置:

  



classpath:CustomValidationMessages

3.CustomValidationMessages.properties

#添加校验错误提交信息
items.name.length.error=请输入1到30个字符
items.createtime.isNUll=请输入日期

public class Items {
private Integer id;

//校验名称在1到30字符中间  
//message是提示校验出错显示的信息  
//groups:此校验属于哪个分组,groups可以定义多个分组  
@Size(min=1,max=30,message="{items.name.length.error}"})  
private String name;

private Float price;

private String pic;

//非空校验  
@NotNull(message="{items.createtime.isNUll}")  
private Date createtime;

@RequestMapping("/edit")
public String editItem(HttpServletRequest request,
@Validate Items item,BindingResult bingdingResult ){
// TODO
}

//在需要校验的pojo前边添加@Validated,在需要校验的pojo后边添加BindingResult bindingResult接收校验出错信息
//注意:@Validated和BindingResult bindingResult是配对出现,并且形参顺序是固定的(一前一后)。

需求:

在pojo中定义校验规则,而pojo是被多个 controller所共用,当不同的controller方法对同一个pojo进行校验,但是每个controller方法需要不同的校验。、

解决方法:

定义多个校验分组(其实是一个java接口),分组中定义有哪些规则

每个controller方法使用不同的校验分组

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

}

public interface ValidGroup2 {
//接口中不需要定义任何方法,仅是对不同的校验规则进行分组

}

6.1  在校验规则中添加分组

public class Items {
private Integer id;

//校验名称在1到30字符中间  
//message是提示校验出错显示的信息  
//groups:此校验属于哪个分组,groups可以定义多个分组  
@Size(min=1,max=30,message="{items.name.length.error}",groups={ValidGroup1.class})  
private String name;

private Float price;

private String pic;

//非空校验  
@NotNull(message="{items.createtime.isNUll}")  
private Date createtime;

// 在需要校验的pojo前边添加@Validated,在需要校验的pojo后边添加BindingResult  
// bindingResult接收校验出错信息  
// 注意:@Validated和BindingResult bindingResult是配对出现,并且形参顺序是固定的(一前一后)。  
// value={ValidGroup1.class}指定使用ValidGroup1分组的 校验  
// @ModelAttribute可以指定pojo回显到页面在request中的key  
@RequestMapping("/editItemsSubmit")  
public String editItemsSubmit(HttpServletRequest request,   

     @Validated(value = { ValidGroup1.class })
      ItemsCustom itemsCustom, BindingResult bindingResult){

}