统一REST响应需定义Result<T>类封装code、msg、data,并用@RestControllerAdvice通过ResponseBodyAdvice自动包装正常返回、ExceptionHandler统一处理异常,确保所有接口返回结构一致且符合HTTP规范。

REST接口返回统一JSON格式,核心是让所有成功响应和异常响应都走同一套结构,避免前端反复适配不同字段名或嵌套层级。关键不在“怎么写JSON”,而在于“怎么让所有出口自动套上这个壳”。
定义清晰的响应体结构
先约定一个通用Java类,比如叫 Result<T>,包含三个固定字段:
- code:业务状态码(不是HTTP状态码),比如200表示成功,400表示参数错误,500表示系统异常
- msg:可读提示信息,如“操作成功”“用户名已存在”
- data:泛型数据体,支持返回任意对象、列表或null
配合一个枚举类 ResultCode 管理常用码值和描述,避免硬编码字符串和数字。
用 @RestControllerAdvice 统一包装正常返回
写一个全局响应增强器,实现 ResponseBodyAdvice 接口:
- 在 beforeBodyWrite 方法中拦截所有 @RestController 的返回值
- 若原返回已是 Result 类型,直接放行;否则自动包装成 Result.success(原数据)
- 这样 Controller 里只需写
return user;,框架自动转成{"code":200,"msg":"成功","data":{...}}
用 @ExceptionHandler 拦截并格式化异常
同样在同一个 @RestControllerAdvice 类中添加异常处理器:
- 捕获 NoHandlerFoundException(404)、HttpRequestMethodNotSupportedException(405)、自定义业务异常等
- 根据异常类型设置对应 code 和 msg,例如 404 → code=404, msg="请求地址不存在"
- 务必开启配置
spring.mvc.throw-exception-if-no-handler-found=true,否则404不会进你的异常处理器
确保 HTTP 头正确且内容合法
统一格式只是第一步,客户端能否正确解析还取决于响应头和JSON语法:
- Spring Boot 默认已设
Content-Type: application/json,无需额外操作 - 但要注意:如果返回空对象或含中文字段,需确认 Jackson 配置支持 UTF-8(一般默认已支持)
- 避免在 Controller 中手动
response.getWriter().write(...),会绕过统一处理机制


















