@RestController 是 Spring Boot 中用于构建 REST 接口的核心注解,等价于 @Controller + @ResponseBody,自动将返回值序列化为 JSON 响应,不支持视图跳转,配合 @GetMapping 等派生注解和 ResponseEntity 可精准控制 HTTP 状态码与响应头。

@RestController 是 Spring Boot 开发 REST 接口最核心的注解,它的作用就是让一个类专用于返回数据(比如 JSON),而不是跳转页面。
直接用 @RestController 声明控制器类
加在类上,表示这个类里所有方法的返回值都会自动序列化成 JSON,写进 HTTP 响应体,不用再每个方法都加 @ResponseBody。
- 它本质是 @Controller + @ResponseBody 的组合,Spring 会自动选用 Jackson 把对象转成 JSON
- 返回 String、List、Map、自定义对象等,都会被处理;返回 null 则响应体为空
- 不支持返回视图名(比如 "index" 或 "home.html"),那样会报错或返回字符串字面量
配合 @RequestMapping 或更具体的映射注解
路径映射建议优先用 @GetMapping、@PostMapping 这类派生注解,语义更清晰,也避免手写 RequestMethod 枚举。
- 类上用 @RequestMapping("/api") 可设公共前缀,比如所有接口都以 /api 开头
- 方法上用 @GetMapping("/users") 表示只响应 GET /api/users
- @PostMapping("/users") 处理新增,请求体通常用 @RequestBody 接收 JSON 数据
- 路径变量用 @PathVariable(如 /users/{id}),查询参数用 @RequestParam(如 ?page=1)
返回值类型推荐用法
不只是返回普通对象,还可以灵活控制状态码和响应头。
- 直接返回 User、List<User> 等:自动 200 OK + JSON
- 返回 ResponseEntity<User>:可手动设状态码(如 CREATED)、Location 头、自定义响应体
- 返回 void 或 ResponseEntity<Void>:适合不需要响应体的 DELETE 或异步操作
- 统一异常处理建议搭配 @ControllerAdvice,避免每个方法都 try-catch
注意几个常见误区
看似简单,但容易踩坑。
- 别在 @RestController 类里返回字符串模板名(如 "user/list"),它不会走 Thymeleaf 或 JSP 解析
- @RequestBody 只能用一次,且要求请求头是 application/json;表单提交要用 @RequestParam 或 DTO 封装
- 如果接口要同时支持 JSON 和 XML,得加上 produces 属性并引入 JAXB 依赖
- 路径中含斜杠或特殊字符时,用 @PathVariable 配合正则表达式更安全(如 @PathVariable("name") String name)


















