处理方法 (Handler Methods)
@RequestMapping 处理方法具有灵活的方法签名,可以从一系列支持的控制器方法参数和返回值中进行选择。
核心内容
- 方法参数:了解可以在控制器方法中注入哪些类型的参数(如
@RequestParam、@RequestBody等)。 - 返回值:了解支持的返回类型(如
ResponseEntity、View、String等)。 - 类型转换:Spring 如何将字符串参数转换为 Java 对象。
- 注解详解:
@RequestParam:处理查询参数和表单数据。@RequestBody&@ResponseBody:处理 JSON/XML 数据。@ModelAttribute:处理模型数据和数据绑定。@PathVariable:处理路径变量。@CookieValue&@RequestHeader:获取 Cookie 和请求头。
补充教学
1. 为什么方法签名如此“灵活”?
在旧版 Spring 中,你必须遵守固定的接口。但在注解模型下,Spring 使用 HandlerMethodArgumentResolver 策略接口。
- 当你定义一个方法时,Spring 会扫描参数上的注解或参数类型。
- 它会遍历所有注册的“解析器”,询问:“你能处理这个参数吗?”
- 如果能,解析器就会负责从
HttpServletRequest中提取数据并转换好交给你。 这种设计让你只需要声明你想要什么,而不需要关心怎么拿。
2. 参数顺序重要吗?
不重要,除非是 Errors 或 BindingResult。
BindingResult必须紧跟在它要校验的参数(如@ModelAttribute或@RequestBody)之后。- 除此之外,你可以随意排列
HttpServletRequest、Locale、Principal和其他注解参数。