Spring MVC Validator 验证

   在使用Spring MVC时,使用了它服务端的验证Validator 验证。遇到了一个问题,在这里记录下。

  

   问题:由于在一个Controller中存在多个可供WEB端使用的方法,根据方法的不同调用不同的验证Validator 进行对参数的验证,例子如下所示:

  方法一简单案例:

public String amethod(@ModelAttribute("matObjecta")MatObjectA  matObjecta, BindingResult bindingResult){
   ......
}

@InitBinder("matObjecta")
public void initBinder(DataBinder binder) {
    binder.setValidator(new MatobjectAvalidator());
}

   方法二简单案例:

  

public String bmethod(@ModelAttribute("matObjectb")MatObjectB  matObjectb, BindingResult bindingResult){
   ......
}
@InitBinder("matObjectb")
public void initBinder(DataBinder binder) {
    binder.setValidator(new MatobjectBvalidator());
}

一、注解说明:

    @ModelAttribute("") 注解用于指定的参数的名称,如果不指定默认是对象名称的首字母小写形式。

    @InitBinder("")注解的参数为@ModelAttribute("") 设置的参数名称时,表示此方法只会在存在@ModelAttribute("") 指定名称相同的参数时,在方法体调用之前执行。如果@InitBinder未设置任何参数时将会在Controller下的所有方法体调用之前都会默认执行,并将反馈结果存在BindingResult 中返回。

二、验证方法书写方式

public class MatobjectAvalidator implements Validator {
    @Override
    public boolean supports(Class<?> clazz) {
        return MatObjectA.class.equals(clazz);
    }
    @Override
    public void validate(Object target, Errors errors) {
         MatObjectA   matObjectA   = (MatObjectA ) target;
   //添加错误信息 会将错误信息反馈到 BindingResult 中
            errors.rejectValue("CODE","VALUE");
    }
}

三、读取错误信息方式:

   可以使用以下方法读取BindingResult 中的错误信息。

  

for (ObjectError error : bindingResult.getAllErrors()) {

                 System.out.println(error.getCode());
  }

  *注:BindingResult 必须定义为Controller中方法的最后 一个参数。

猜你喜欢

转载自timerbin.iteye.com/blog/2037870