Skip to content

处理方法 (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 和其他注解参数。

Based on Spring Framework.