0

我正在构建一个包含多个 Maven 工件的应用程序。由于设计限制,其中一个工件本质上是后端,无法访问请求(因此不允许使用@RequestMapping)。现实情况是,有些请求需要直接连接到其中一些类方法。

我在春天做了一些深潜,并遇到了使它工作所需的一半。简单的部分是自己编写一个 HandlerMapping 并正确配置它。该映射器将了解后端实体以手动映射必要的 url。

我找不到的部分是 Spring 在哪里(什么)管理调用?例如,当您有:

@Component
@RequestMapping("/mypath")
public class MyStuff
{
   @RequestMapping(value = "/dothis", method = RequestMethod.GET)
   public ResponseEntity<String> doThis(HttpServletRequest request)
   {
   }
}

当向 /mypath/dothis 发出请求时,哪个对象会拦截该请求并在正确的 bean 中调用正确的方法?据我所知,映射器仅返回映射到特定 bean的所有url 的字符串数组。

4

2 回答 2

3

概括地说,这就是流程——Spring 的 DispatcherServlet 首先处理请求——这是在 web.xml 文件中有条目的流程。

DispatcherServlet维护一个 HandlerAdapters 和 HandlerMappings 的列表,对于请求,它向每个 handlerMapping 询问一个处理程序

在 Spring 3.1 中,主要的 handlerMapping 实现之一是RequestMappingHandlerMapping维护请求 uri 到处理程序的映射(HandlerMethod最终指向 @RequestMapping 映射方法)。

一旦从 HandlerMapping 中获得了一个处理程序,DispatcherServlet 就会询问每个 handlerAdapter 是否可以处理请求(HandlerAdapter.supports api),如果可以,则将请求分派到适当的 HandlerAdapter,最终调用 handlerMethod。在 Spring 3.1 中,注册的主要 HandlerAdapter<mvc:annotation-driven/>RequestMappingHandlerAdapter

我认为这应该足以开始进行更深入的调查。遵循流程的一个好方法是在 DispatcherServlet 中放置一个断点并通过堆栈跟随流程。

于 2012-08-15T22:15:06.550 回答
0

http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html

See section 16.4 about request interceptors. You should be able to use that to map to your class.

于 2012-08-15T22:03:34.810 回答