@RestController 是 Spring Boot 开发 RESTful API 的核心注解,专门用于构建前后端分离、微服务架构中的接口服务。 该注解会将类标记为 Spring MVC 控制器,自动将所有方法的返回值序列化为 JSON/XML 并写入 HTTP 响应体,无需跳转视图页面,是现代 Spring 开发的标准用法。
@RestController 是复合注解,等价于: @Controller + @ResponseBody
@Controller:将类注册为 Spring 控制器,接收 HTTP 请求
@ResponseBody:全局生效,所有方法返回值直接作为响应数据,不解析视图
// 推荐写法(Spring Boot 标准)
@RestController
public class RoomController {
// 返回对象自动转为 JSON
@GetMapping("/room")
public Room getRoom() {
return new Room(1L, "标准间", 299);
}
}
// 等价传统写法(冗余,不推荐)
@Controller
@ResponseBody
public class RoomController {
@GetMapping("/room")
public Room getRoom() {
return new Room(1L, "标准间", 299);
}
}@RestController 必须配合请求映射注解使用,用于绑定接口地址与请求方式:
@RequestMapping:通用映射,可指定所有请求方式(类上统一前缀)
@GetMapping:处理 GET 请求(查询资源)
@PostMapping:处理 POST 请求(创建资源)
@PutMapping:处理 PUT 请求(全量更新资源)
@PatchMapping:处理 PATCH 请求(部分更新资源,原文补充)
@DeleteMapping:处理 DELETE 请求(删除资源)
类上统一前缀
@RestController
@RequestMapping("/api/users") // 所有接口统一前缀
public class UserController { }Spring Boot 自动绑定 HTTP 请求参数,支持 4 种最常用方式:
@PathVariable路径变量
从 URL 路径中提取参数(RESTful 标准用法)
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) { ... }
// 支持自定义名称:@PathVariable("userId") Long id@RequestParam请求参数
获取 URL 问号后的查询参数(?name=张三&age=20)
@GetMapping("/search")
public List<User> search(
@RequestParam String name,
@RequestParam(required = false, defaultValue = "0") Integer age
) { ... }@RequestBody请求体
接收 JSON 格式请求体,自动反序列化为 Java 对象
@PostMapping
public User createUser(@RequestBody User user) { ... }@RequestHeader请求头
获取 HTTP 请求头参数
@GetMapping("/header")
public String getToken(@RequestHeader("Authorization") String token) { ... }企业级标准用法
默认使用 Jackson 框架将 Java 对象 / 集合转为 JSON,无需手动处理。
ResponseEntity<T>
推荐所有接口使用,可自定义:
HTTP 状态码
响应头
响应体
@PostMapping
public ResponseEntity<User> createUser(@RequestBody User user) {
User savedUser = userService.save(user);
// 201 状态码 + 响应数据
return ResponseEntity.status(HttpStatus.CREATED).body(savedUser);
}@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
userService.delete(id);
return ResponseEntity.noContent().build(); // 204 无内容
}import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/users")
public class UserController {
// 依赖注入
private final UserService userService;
// 构造器注入(Spring 4.3+ 推荐)
public UserController(UserService userService) {
this.userService = userService;
}
// 1. 查询所有用户
@GetMapping
public ResponseEntity<List<User>> list() {
return ResponseEntity.ok(userService.listAll());
}
// 2. 根据ID查询用户
@GetMapping("/{id}")
public ResponseEntity<User> getById(@PathVariable Long id) {
return ResponseEntity.ok(userService.getById(id));
}
// 3. 新增用户
@PostMapping
public ResponseEntity<User> create(@RequestBody User user) {
return ResponseEntity.status(HttpStatus.CREATED).body(userService.save(user));
}
// 4. 全量更新用户
@PutMapping("/{id}")
public ResponseEntity<User> update(@PathVariable Long id, @RequestBody User user) {
return ResponseEntity.ok(userService.update(id, user));
}
// 5. 删除用户
@DeleteMapping("/{id}")
public ResponseEntity<Void> delete(@PathVariable Long id) {
userService.delete(id);
return ResponseEntity.noContent().build();
}
}@RestController = @Controller + @ResponseBody,自动返回 JSON 数据
核心配套:请求映射注解、参数绑定、ResponseEntity 响应
企业开发必须搭配:统一响应体、全局异常处理、参数校验
是 Spring Boot 构建 RESTful API 的唯一标准注解