在使用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中方法的最后 一个参数。