何时在春季 mvc 中进行数据绑定和验证



>我最近浏览了春季 MVC 文档,并在 DispatcherServlet 下了解下面的请求处理流程

1(创建请求上下文

2(找到在 准备的处理程序/处理者映射 上下文启动

3(Exceute 拦截器 preHandler 方法(如果已配置

4(执行处理程序/控制器方法

5(Exceute Interceptors postHandler 方法(如果已配置

6(处理异常(如果有(

(七((渲染视图

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 将数据从请求绑定到模型和 userDetail 对象?

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

更新:- 假设我已经在控制器方法下设置了自定义验证器,如下所示。现在在什么时间点customValidation InitBinder将被执行?

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

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

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

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

最新更新