java rest接口统一json响应需定义泛型result类(含code、message、data、timestamp)、@controlleradvice全局异常处理、controller中统一返回result,并配置jackson序列化规则。

在 Java 的 REST 接口中返回统一的 JSON 响应格式,核心是**定义一个通用响应体类 + 全局异常处理 + 统一返回封装**,避免每个接口手动拼 JSON 或重复写状态码、消息、数据字段。
定义统一响应结果类(Result)
创建一个泛型类,包含标准字段:状态码(code)、提示信息(message)、业务数据(data)、时间戳(timestamp)等:
- code:约定成功为 200,参数错误 400,未授权 401,服务器异常 500 等
- message:对前端友好的简明提示,如 "操作成功"、"用户不存在"
- data:泛型 T,支持返回任意类型对象或 null(如删除接口可不返回数据)
- 建议添加静态工厂方法,如
success()、fail(int code, String msg),简化调用
用 @ControllerAdvice + @ResponseBody 统一拦截异常
通过全局异常处理器捕获运行时异常、参数校验异常(如 @Valid 触发的 MethodArgumentNotValidException)、自定义业务异常等,并统一转为 Result 响应:
- 用
@ExceptionHandler分别处理不同异常类型 - 对
MethodArgumentNotValidException,提取第一个校验失败的 message,避免返回整个错误列表 - 对自定义异常(如
BusinessException),直接取其 code 和 message 构建 Result - 对未捕获的
Exception,记录日志并返回 500 错误,避免暴露堆栈给前端
在 Controller 中统一使用 Result 封装返回
所有接口方法返回类型设为 Result<t></t>,不再直接返回实体或 void:
- 查询单个用户:
return Result.success(user); - 无返回值操作(如删除):
return Result.success();(data 为 null) - 校验失败或业务拒绝:
return Result.fail(400, "手机号格式不正确"); - 配合 Lombok 的
@Data和静态构造方法,代码简洁且语义清晰
可选:配合 Spring Boot 的 WebMvcConfigurer 统一处理空值与日期格式
确保 JSON 序列化行为一致,提升前端解析稳定性:
- 配置 Jackson,忽略 null 字段(
JsonInclude.Include.NON_NULL) - 统一日期格式,如
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")或全局配置 - 启用
WRITE_DATES_AS_TIMESTAMPS = false,避免时间戳数字形式
不复杂但容易忽略的是:前后端要提前约定好 code 含义和 message 风格(比如是否含标点、是否小写开头),并在文档或 Swagger 中体现。这样一套机制下来,接口响应结构干净,异常可控,前端也容易做统一 loading 和错误提示。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











