Skip to content

处理方法 (Handler Methods)

@RequestMapping 处理方法具有灵活的方法签名,可以从一系列支持的控制器方法参数和返回值中进行选择。

核心内容

  • 方法参数:了解可以在控制器方法中注入哪些类型的参数(如 @RequestParam@RequestBody 等)。
  • 返回值:了解支持的返回类型(如 ResponseEntityViewString 等)。
  • 类型转换:Spring 如何将字符串参数转换为 Java 对象。
  • 注解详解
    • @RequestParam:处理查询参数和表单数据。
    • @RequestBody & @ResponseBody:处理 JSON/XML 数据。
    • @ModelAttribute:处理模型数据和数据绑定。
    • @PathVariable:处理路径变量。
    • @CookieValue & @RequestHeader:获取 Cookie 和请求头。

补充教学

1. 为什么方法签名如此“灵活”?

在旧版 Spring 中,你必须遵守固定的接口。但在注解模型下,Spring 使用 HandlerMethodArgumentResolver 策略接口。

  • 当你定义一个方法时,Spring 会扫描参数上的注解或参数类型。
  • 它会遍历所有注册的“解析器”,询问:“你能处理这个参数吗?”
  • 如果能,解析器就会负责从 HttpServletRequest 中提取数据并转换好交给你。 这种设计让你只需要声明你想要什么,而不需要关心怎么拿

2. 参数顺序重要吗?

不重要,除非是 ErrorsBindingResult

  • BindingResult 必须紧跟在它要校验的参数(如 @ModelAttribute@RequestBody)之后。
  • 除此之外,你可以随意排列 HttpServletRequestLocalePrincipal 和其他注解参数。

Based on Spring Framework.