SpringMvc的数据校验

     Spring4.0拥有自己独立的数据校验框架,同时支持JSR 303标准的校验框架,Spring在进行数据绑定的时候,可同时调用校验框架完成数据校验工作,在SpringMvc中,可直接通过注解驱动的方式进行数据校验。

    Spring的LocalValidatorFactoryBean既实现了Spring的Validator接口,也实现了JSR 303的Validator接口,只要在Spring容器里定义了一个LocalValidatorFactoryBean,即可将其注入到需要数据校验的bean中,Spring本身并没有提供JSR 303的实现,所以必须将JSR 303的jar包放到类路径下。

    <mvc:annotation-driven/>会默认装配好一个LocalValidatorFactoryBean,通过在处理方法的入参前面标注@Valid注解即可让SpringMvc在完成数据绑定之后执行数据校验的工作。

package com.seven.demos;

import com.seven.domain.Employee;
import org.springframework.stereotype.Controller;
import org.springframework.validation.Errors;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.validation.Valid;

/**
 * Created by hu on 2016/4/4.
 */
@RequestMapping("/SpringMvcTest1")
@Controller
public class SpringMvcTest1 {
    /*
    * 在目标方法中获取校验结果
    * 在表单/命令对象的属性中标注校验注解,在处理方法对应的入参前添加@Valid,SpringMvc就会实施校验
    * 并将校验结果保存在校验入参对象之后的BindingResult或Error入参中。
    * 常用的方法:
    * FieldError getFieldError(String field)
    * List<FieldError> getFieldErrors()
    * Object getFieldValue(String field)
    * int getErrorCount()
    * */
    @RequestMapping("/save")
    public String save(@Valid Employee employee,Errors errors){
        System.out.println("save:"+employee);
        if (errors.getErrorCount()>0){
            System.out.println("出错了!");
            for(FieldError error:errors.getFieldErrors()){
                System.out.println(error.getField()+":"+error.getDefaultMessage());
            }
            //出错了,重新返回输入页面
            return "input";
        }
        //没有出错,就转到正确的页面
        return "success";
    }
}

  SpringMvc除了会将表单/命令对象的校验结果保存在对应的BindingResult或Error对象中外,还会将所有校验结果保存到"隐含模型",即使处理方法的签名中没有对应与表单/命令对象的结果入参,校验结果也会保存在"隐含模型"中。隐含模型中的所有数据最终都是通过HttpServletRequest的属性列表暴露给JSP视图对象,因此在JSP中可以获取错误信息。

原文地址:https://www.cnblogs.com/hujingwei/p/5350093.html