关键流程是DispatcherServlet作为前端控制器接收请求,委托HandlerMapping(如RequestMappingHandlerMapping)匹配@GET/POST等注解定位Controller方法,再由HandlerAdapter(如RequestMappingHandlerAdapter)解析参数、反射调用并处理返回值,最终生成JSON或视图响应。

要看 Spring Boot 中 REST 接口的底层原理,关键不是“翻完所有源码”,而是抓住几个核心组件及其协作链条:从请求进来,到匹配控制器方法,再到执行和返回。整个流程围绕 DispatcherServlet → HandlerMapping → HandlerAdapter → Controller 展开。
1. 请求入口:DispatcherServlet 是总调度员
所有 HTTP 请求都先经过 Spring MVC 的前端控制器 DispatcherServlet(它本身是 Servlet,由 Tomcat 等容器调用)。它不处理业务,只负责分发:
- 解析请求路径、HTTP 方法、参数、Content-Type 等基本信息
- 委托给 HandlerMapping 找谁来处理这个请求
- 再交给 HandlerAdapter 去真正调用那个方法
2. 映射定位:RequestMappingHandlerMapping 怎么找到你的 @GetMapping
你写的 @GetMapping("/user") 或 @RequestMapping(value="/user", method=GET),在启动时就被 RequestMappingHandlerMapping 扫描并注册为一个 HandlerMethod(即“某个类的某个方法”)。
它内部维护一张映射表(类似 Map<RequestCondition, HandlerMethod>),匹配依据包括:
- URL 路径(/user)
- HTTP 方法(GET/POST/PUT/DELETE)
- 请求头(如 Accept: application/json)
- 参数条件(如 params="format=json")
当请求到达时,它遍历所有注册的映射规则,选出最匹配的一个 HandlerMethod。
3. 方法执行:HandlerAdapter 如何调用你的 Controller
找到目标方法后,RequestMappingHandlerAdapter 负责实际执行。它的核心工作是:
- 解析方法参数:比如把 URL 路径变量(@PathVariable)、查询参数(@RequestParam)、请求体(@RequestBody)等,从原始 HttpServletRequest 中提取并转换成 Java 对象
- 调用目标方法:通过反射执行 controller 方法
- 处理返回值:根据返回类型(String、ResponseEntity、对象等)选择合适的 HandlerMethodReturnValueHandler,比如用
MappingJackson2HttpMessageConverter把对象转成 JSON 写入响应体
4. Rest 风格支持:HiddenHttpMethodFilter 干了什么
浏览器原生表单只支持 GET 和 POST。要让 POST 表单模拟 PUT/DELETE,Spring 依赖 HiddenHttpMethodFilter 这个 Filter:
- 它在 DispatcherServlet 之前拦截请求
- 检查是否为 POST 请求,且带有
_method=put或_method=delete隐藏字段 - 若满足,则把原始 request 的 method “伪装”成 PUT 或 DELETE,后续流程就按真实 method 匹配了
注意:该 Filter 默认不启用,需在配置文件中显式打开:
spring.mvc.hiddenmethod.filter.enabled=true


















