Spring MVC 的核心流程是:DispatcherServlet 接收请求,HandlerMapping 找处理器,HandlerAdapter 调用控制器,参数解析器把 HTTP 输入转换成 Java 参数。
Table of contents
Open Table of contents
运行映射实验
GreetingController下载声明 /greetings:
mvn -Dtest=SpringSourceLabTest#mvcMapsGreetingController test
测试加载 RequestMappingHandlerMapping,确认映射基础设施和控制器结果。完整 HTTP 测试还应使用 MockMvc 验证状态码、JSON 与过滤器。
DispatcherServlet 初始化什么
DispatcherServlet 启动时从 WebApplicationContext 查找或创建 HandlerMapping、HandlerAdapter、异常解析器和视图解析器等策略组件。它不直接反射调用每个控制器。
RequestMappingHandlerMapping 扫描控制器方法,把路径、HTTP 方法、媒体类型和参数条件注册为映射。冲突映射会在启动期失败,比运行时随机选择更安全。
参数由解析器逐个完成
HandlerAdapter 为方法参数选择 HandlerMethodArgumentResolver:
@RequestParam读取查询或表单参数;@PathVariable读取路径变量;@RequestHeader读取请求头;@RequestBody通过 HttpMessageConverter 反序列化正文;- Servlet 请求、Principal 等由专用解析器提供。
数据绑定不是安全边界。只暴露允许客户端修改的 DTO 字段,使用 Bean Validation 做格式约束,并在领域层检查权限和业务不变量。
内容协商决定表示形式
Accept 表示客户端能接收什么,Content-Type 表示请求正文是什么。没有可用 Converter 时会得到 415 或 406;排查时检查头部、控制器 consumes/produces 和实际依赖。
下一步
阅读Spring MVC 请求异常与响应流程,实现稳定错误协议并分清 Filter、Interceptor 与 Advice 顺序。