本文档涵盖了 Spring MVC,这是 Spring Framework 中基于 Servlet 的 Web 框架。Spring MVC 提供了用于构建 Web 应用程序的服务器端基础设施以及客户端 HTTP 通信功能。有关响应式 Web 编程,请参阅 WebFlux 和响应式编程。有关 HTTP 消息抽象和 URI 处理工具,请参阅 HTTP 抽象和 URI 处理。
Spring MVC 包含两个主要组件:用于在 Servlet 容器中处理 HTTP 请求的服务器端基础设施,以及客户端 HTTP 通信工具。该框架遵循模型-视图-控制器 (Model-View-Controller) 模式,并与 Spring 的核心容器和依赖注入功能深度集成。
来源: spring-web/src/main/java/org/springframework/web/client/RestTemplate.java85-126 spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java124-200
RestTemplate 是 Spring MVC 的主要同步 HTTP 客户端,它提供了一种基于模板的方法来发出 HTTP 请求。它提供了用于常见 HTTP 操作的便捷方法,并自动处理请求/响应转换。
RestTemplate 类为所有标准 HTTP 动词提供了方法
getForObject() / getForEntity() - GET 请求postForObject() / postForEntity() / postForLocation() - POST 请求put() - PUT 请求patchForObject() - PATCH 请求delete() - DELETE 请求optionsForAllow() - OPTIONS 请求headForHeaders() - HEAD 请求exchange() - 适用于任何 HTTP 方法的通用方法来源: spring-web/src/main/java/org/springframework/web/client/RestTemplate.java442-692 spring-web/src/main/java/org/springframework/web/client/RestTemplate.java695-773
RestTemplate 根据类路径上可用的库自动检测和配置 HttpMessageConverter 实例。这些转换器负责处理请求和响应体的序列化和反序列化。
来源: spring-web/src/main/java/org/springframework/web/client/RestTemplate.java206-273 spring-web/src/main/java/org/springframework/http/converter/support/AllEncompassingFormHttpMessageConverter.java104-161
Spring MVC 的配置围绕 WebMvcConfigurationSupport 展开,它注册并配置所有必要的 MVC 组件。应用程序通常使用 @EnableWebMvc,它会导入 DelegatingWebMvcConfiguration。
来源: spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java125-200 spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.java44-56
WebMvcConfigurationSupport 以特定顺序注册了多个 HandlerMapping 实例
| 顺序 | 处理器映射 | 目的 |
|---|---|---|
| -1 | RouterFunctionMapping | 映射路由函数 |
| 0 | RequestMappingHandlerMapping | 映射 @RequestMapping 注解的方法 |
| 1 | 视图控制器映射 | 直接 URL 到视图的映射 |
| 2 | BeanNameUrlHandlerMapping | 映射 URL 到 Bean 名称 |
Integer.MAX_VALUE-1 | 资源处理器映射 | 提供静态资源 |
Integer.MAX_VALUE | 默认 Servlet 映射 | 转发到默认 Servlet |
配置根据类路径依赖自动检测并注册消息转换器
来源: spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java203-260 spring-web/src/main/java/org/springframework/web/client/RestTemplate.java164-185
Spring MVC 通过一个定义良好的管道处理传入的 HTTP 请求,该管道涉及处理器映射、适配器和解析器
RequestMappingHandlerAdapter 负责处理 @RequestMapping 注解的控制器方法的调用,管理参数解析、返回值处理和异常处理。
Spring MVC 与 Spring 的核心容器及支持服务深度集成
WebMvcConfigurationSupport 类创建了用于转换服务、验证、内容协商和路径匹配的 Bean,这些 Bean 在整个 MVC 基础设施中共享。
来源: spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java744-758 spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java457-497