在requestMappingHandlerMapping中使用HandlerMethodArgumentResolver

时间:2018-06-20 19:54:01

标签: spring-mvc request-mapping

 requestMappingHandlerMapping.registerMapping(requestMappingInfo, this, GenericController.class.getDeclaredMethod("handleRequests", UserData.class,
                    HttpSession.class, Locale.class, HttpServletRequest.class, Model.class));

其中

 public void handleRequests(@ModelAttribute("userData") final UserData userData, final HttpSession session, final Locale local,
            final HttpServletRequest request, final Model model) throws Exception {

是否可以支持@ModelAttribute注入?

1 个答案:

答案 0 :(得分:0)

您的想法存在问题

您为什么要在HandlerMethodArgumentResolver中使用RequestMappingHandlerMappingHandlerMapping与定义请求和处理程序对象之间的映射有关,而不是实际解析处理程序方法参数。这就是HandlerAdapter的目的。

DispatcherServlet默认提供RequestMappingHandlerAdapter,其中ModelAttributeMethodProcessor作为HandlerMethodArgumentResolvers之一;这是实际解析@ModelAttribute-带注释的参数的类。

建议

使用RequestMappingHandlerAdapter。为什么?

  • 关注分离!仅此类应关注解析处理程序方法的参数,包括@ModelAttribute参数
  • 无论如何,您都将必须使用此HandlerAdapter及其默认值HandlerMethodArgumentResolver来解析方法中的其他参数(HttpSessionLocale,{{ 1}},...)