java - Spring 的 @RequestMapping 内部结构

标签 java spring web http-request-parameters

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

我在 Spring 进行了一些深入研究,发现了让它发挥作用所需的一半内容。最简单的部分是自己编写一个 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 的字符串数组。

最佳答案

从高层次来看,这是流程 - Spring 的 DispatcherServlet 首先处理请求 - 这是 web.xml 文件中具有条目的请求。

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

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

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

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

关于java - Spring 的 @RequestMapping 内部结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11977750/

相关文章:

java - Swing:MouseListener 仅在 ImageIcon 上而不是 JLabel 上

Java套接字超时错误

java - 使用 Java 对 parent 和 child 进行排序

java - 如何从稍后要完成的事务中提取更新?

html - Bootstrap 导航栏下拉菜单背景不起作用

php - Laravel 未安装依赖项 php 版本不正确

java - 按类进行 JNDI 查找

java - 如何从 XSD 创建 pojo 类?

java - 如何使用 Spring + Teradata 配置多个事务管理器

web - 在谷歌上搜索我的网站