spring 参数绑定原理
时间: 2023-07-12 17:33:41 浏览: 55
在 Spring 中,参数绑定是指将 HTTP 请求中携带的参数绑定到 Controller 方法的参数上。Spring 通过 HandlerAdapter 中的 ArgumentResolver 实现参数绑定。
当一个请求到来时,DispatcherServlet 会根据请求 URL 找到对应的 HandlerMapping,然后调用 HandlerAdapter 的 handle 方法来执行对应的 Controller 方法。在 handle 方法中,Spring 会通过 HandlerMethod 的参数列表获取到 Controller 方法的参数类型和参数名称,然后通过 ArgumentResolver 进行参数绑定。
Spring 中内置了许多 ArgumentResolver,如:
- RequestParamMethodArgumentResolver:用于绑定请求参数到方法参数上
- PathVariableMethodArgumentResolver:用于绑定 URL 路径中的参数到方法参数上
- ModelAttributeMethodProcessor:用于绑定请求参数到带有 @ModelAttribute 注解的方法参数上
- ServletModelAttributeMethodProcessor:用于绑定请求参数到带有 @ModelAttribute 注解的方法参数上,与 ModelAttributeMethodProcessor 不同的是,该 ArgumentResolver 还支持绑定 ServletRequest 和 ServletResponse。
当找到合适的 ArgumentResolver 后,Spring 会调用其 resolveArgument 方法进行参数绑定。如果绑定成功,则将绑定后的参数传入 Controller 方法中进行处理。如果绑定失败,则会抛出异常或返回 null。
总的来说,Spring 的参数绑定机制非常灵活和可扩展,可以通过自定义 ArgumentResolver 来实现复杂的参数绑定逻辑。