@RestController是@Controller与@ResponseBody的组合注解,用于标识REST控制器,其方法返回值自动序列化为JSON写入响应体,无需额外配置,专为前后端分离场景设计。

@RestController 是 Spring Boot 中最常用的注解之一,它本质是 @Controller 和 @ResponseBody 的组合,表示这个类中所有方法的返回值都会被自动转为 JSON(或其他媒体类型),直接写入 HTTP 响应体,无需额外配置。
一、基础用法:定义一个 REST 控制器
只需在类上添加 @RestController,再配合 @RequestMapping 或更具体的 @GetMapping、@PostMapping 等即可:
<font size="2">@RestController<br>public class UserController {<br><br> @GetMapping("/users/{id}")<br> public User getUserById(@PathVariable Long id) {<br> return new User(id, "张三", 25);<br> }<br><br> @PostMapping("/users")<br> public User createUser(@RequestBody User user) {<br> // 保存逻辑...<br> return user;<br> }<br>}</font>
Spring Boot 会自动将 User 对象序列化为 JSON,响应头设为 Content-Type: application/json。
二、配合 @RequestBody 接收 JSON 请求体
前端发送 POST/PUT 请求时,若 Content-Type 是 application/json,用 @RequestBody 可直接绑定 JSON 数据到 Java 对象:
立即学习“Java免费学习笔记(深入)”;
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 确保实体类有无参构造器和 getter/setter 方法(Lombok 的
@Data可简化) - 字段名需与 JSON key 一致,或用
@JsonProperty显式映射 - 如 JSON 中有缺失字段,对应 Java 字段为 null(基本类型需用包装类,如
Integer)
三、统一返回结构(推荐实践)
实际项目中不建议直接返回原始对象,而是封装成统一格式(如 { "code": 200, "data": {}, "msg": "success" })。可定义通用响应类:
<font size="2">public class Result<T> {<br> private int code;<br> private String msg;<br> private T data;<br> // 构造方法、getter/setter 省略<br>}</font>
然后控制器中返回 Result<User>,既规范又便于前端处理错误和加载状态。
四、异常统一处理(避免暴露堆栈)
使用 @RestControllerAdvice + @ExceptionHandler 捕获全局异常,返回友好 JSON 错误信息:
<font size="2">@RestControllerAdvice<br>public class GlobalExceptionHandler {<br><br> @ExceptionHandler(UserNotFoundException.class)<br> public Result<String> handleUserNotFound(UserNotFoundException e) {<br> return Result.fail(404, e.getMessage());<br> }<br>}</font>
这样即使业务抛出异常,接口仍返回标准 JSON,不会因未捕获异常导致 500 响应体是 HTML 或空内容。

















