理解
Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,围绕前端控制器模式设计的
Dispatcher :调度
Servlet:小服务程序
DispatcherServlet
中央控制器Servlet为DispatcherServlet请求处理提供共享算法,而实际工作由可配置的委托组件执行。
DispatcherServlet使用 Spring 配置来发现 请求映射、视图解析、异常处理等所需的委托组件。
路径匹配
可用 PathMatcher的解析来更全面地解决
请求映射
- @RequestMapping
将请求映射到控制器方法。
有各种属性来匹配 URL、HTTP 方法、请求参数、标头和媒体类型。
可以在类级别使用它来表达共享映射,或者在方法级别使用它来缩小到特定的端点映射。
还有HTTP方法特定的快捷方式变体- @GetMapping
- @PostMapping
- @PutMapping
- @DeleteMapping
- @PatchMapping
1.耗材类型
可以根据请求缩小请求映射Content-Type
使用consumes属性按内容类型缩小映射范围
@PostMapping(path = "/pets", consumes = "application/json")
2.可生产的媒体类型
可以根据Accept请求标头和控制器方法生成的内容类型列表来缩小请求映射
@GetMapping(path = "/pets/{petId}", produces = "application/json")
3.参数、标题
可以根据请求参数条件缩小请求映射。您可以 测试请求参数是否存在 ( myParam)、是否存在 ( !myParam) 或特定值 ( myParam=myValue)
@GetMapping(path = "/pets/{petId}", params = "myParam=myValue")
@GetMapping(path = "/pets", headers = "myHeader=myValue")
处理程序方法
方法参数
- javax.servlet.ServletRequest;javax.servlet.ServletResponse
选择任何特定的请求或响应类型 - java.security.Principal
Principal当前经过身份验证的用户——如果已知,可能是特定的实现类 - @PathVariable
用于访问 URI 模板变量 - @RequestParam
- 用于访问 Servlet 请求参数,包括多部分文件。参数值被转换为声明的方法参数类型。
- 默认情况下,使用此注解的方法参数是必需的,但您可以通过将@RequestParam注解的required标志设置为 false或使用java.util.Optional包装器声明参数来指定方法参数是可选的。
- @RequestHeader
用于访问请求标头。 - @CookieValue
用于访问 cookie。Cookies 值被转换为声明的方法参数类型。 - @RequestBody
用于访问 HTTP 请求正文。使用实现将正文内容转换为声明的方法参数类型HttpMessageConverter。 - @RequestPart
要访问请求中的某个部分,multipart/form-data请使用HttpMessageConverter。