何时在spring mvc中进行数据绑定和验证?

时间:2014-12-23 08:22:55

标签: java spring-mvc

我最近通过Spring MVC doc并在DispatcherServlet下了解下面的请求处理流程

  

1)创建请求上下文

     

2)通过处理程序映射找到处理程序/控制器映射   上下文启动

     

3)Exceute Interceptors preHandler方法(如果已配置)

     

4)执行Handler / Conroller方法

     

5)如果配置了

,则为Exceute Interceptors postHandler方法      

6)处理异常(如果有的话)

     

7)渲染视图

     

8)如果配置完成后,可以使用完成后的拦截器

现在我有以下方法

    @RequestMapping(value="/userHistory", method=RequestMethod.GET)
    public @ResponseBody UserDetails getUserHistory(Model model, @valid UserDetail userDetail HttpServletRequest request, HttpServletResponse response) {
      model.addAttribute("userDetail", new userDetail());
    }

我的问题是在上述请求处理流程的哪个时间点,DispatcherServlet将数据从请求绑定到model和userDetail对象?

同样,dispacherservlet在什么时候触发使用有效注释注释的UserDetail对象的验证?

更新: - 假设我已经在这样的控制器方法下设置了customValidator。现在什么时候customValidation  并且InitBinder将被执行?

    @InitBinder
    private void initBinder(WebDataBinder binder) {
        binder.setValidator(customValidator);
    }

1 个答案:

答案 0 :(得分:0)

在步骤3和4之间。数据绑定由参数解析器处理。那些人也负责验证。

在您的示例中,您有参数@valid UserDetail userDetail。 Spring为该参数使用的默认解析器是ServletModelAttributeMethodProcessor。它将传入的表单数据绑定到UserDetail实例,如果存在@Valid@Validated注释,它还会验证该对象。这意味着验证不是一个单独的步骤,而是由参数解析器处理或根本不处理。

在执行了所有参数解析器之后,使用已解析的参数调用处理程序方法。