@RestController和@RequestMapping
@RestController
@RestController 是加在类上的注解,它的核心作用是告诉 Spring:这个类是一个控制器,并且这个类里所有方法的返回值都直接写入 HTTP 响应体(Response Body),而不是跳转到视图页面(如 JSP)。
- 它是一个组合注解,等于
@Controller+@ResponseBody。 - 如果你在类上只写
@Controller,方法上必须加@ResponseBody才能返回 JSON/XML;而写上@RestController,则省去了每个方法上的@ResponseBody。
@RequestMapping
@RequestMapping 是加在类或方法上的注解,它的核心作用是将特定的 HTTP 请求(URL、方法类型等)绑定到对应的类或处理方法上,也就是路由映射。
- 它负责定义“访问路径”(比如
/api/users)和“请求方式”(GET/POST/PUT/DELETE)。 - 它有多个衍生变体(其实就是简写):
@GetMapping、@PostMapping、@PutMapping、@DeleteMapping。
区别和联系
| 维度 | @RestController | @RequestMapping |
|---|---|---|
| 标注位置 | 只能标注在类上 | 既可标注在类上,也可标注在方法上 |
| 核心职责 | 声明该类是 RESTful 风格的控制器,且返回数据(JSON/XML)而非视图 | 声明 URL 路径映射(即:什么地址访问这个方法) |
| 是否必须 | 非必须(可以用 @Controller + @ResponseBody 替代) |
必须(否则方法无法被 HTTP 请求访问到) |
| 作用范围 | 作用于整个类的所有方法(统一套用 @ResponseBody 行为) |
类上定义父路径(前缀),方法上定义子路径(具体端点) |
@RequestMapping 的变体
现在企业开发中,为了更精确地限制 HTTP 方法,通常不再直接使用 @RequestMapping 在方法上,而是用它的变体:
@GetMapping=@RequestMapping(method = RequestMethod.GET)@PostMapping=@RequestMapping(method = RequestMethod.POST)
这些变体本质上还是 @RequestMapping,只是写法更简洁。
@RequestParam
| 情况 | 建议 |
|---|---|
| 必填参数 | 必须加 @RequestParam(默认 required=true) |
| 可选参数 | 加 @RequestParam(required=false),并在代码中判空 |
| 需默认值 | 加 @RequestParam(defaultValue = "xxx") |
| 简单场景且参数名不变 | 不加也能工作,但为规范起见建议加上 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 coder-xuyong!
评论








