Spring Validation 验证

基本配置

1.pom引入maven依赖

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.4.0.Final</version>
</dependency>

2.增加validation配置

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

  <!-- 校验器注入到处理器适配器中-->

  <mvc:annotation-driven validator="validator"></mvc:annotation-driven>

  <!-- 校验器 -->
    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <!-- hibernate校验器-->
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
        <!-- 指定校验使用的资源文件,在文件中配置校验错误信息,如果不指定则默认使用classpath下的ValidationMessages.properties -->
        <property name="validationMessageSource" ref="messageSource" />
    </bean>
<!-- 校验错误信息配置文件 -->
    <bean id="messageSource"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <!-- 资源文件名-->
        <property name="basenames">   
            <list>    
            <value>classpath:CustomValidationMessages</value> 
            </list>   
        </property>
        <!-- 资源文件编码格式 -->
        <property name="fileEncodings" value="utf-8" />
        <!-- 对资源文件内容缓存时间,单位秒 -->
        <property name="cacheSeconds" value="120" />
    </bean>

3.CustomValidationMessages.properties

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

4. pojo中添加校验规则

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;

5. 捕获校验错误信息

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

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

6.分组校验

需求:

在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){ }


原文地址:https://www.cnblogs.com/zcjyzh/p/11692150.html