responsestatusexception可直接抛出以自动返回http状态码和错误信息,支持传入httpstatus、消息及可选异常原因,配合@exceptionhandler可统一定制响应格式,无需与@responsestatus混用。

直接用 ResponseStatusException 构造器抛出,就能让 Spring Boot 自动返回对应 HTTP 状态码和可选的错误信息,无需手动配置响应体或状态码。
基础用法:指定状态码和简单消息
最简方式是传入 HttpStatus 枚举和字符串消息:
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "用户不存在");throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "参数校验失败");
Spring Boot 会自动将该异常解析为对应状态码的响应,并在响应体中包含 message 字段(默认 JSON 格式)。
进阶用法:带原因(cause)便于排查
如果想保留原始异常堆栈,可传入第三个参数 Throwable cause:
throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "数据库查询失败", e);
这样既返回 500 状态码,又不会丢失底层异常信息,方便日志追踪和调试。
配合 @ExceptionHandler 统一处理(可选但推荐)
若需定制错误响应结构(比如统一加 code、timestamp 字段),可在全局异常处理器中捕获:
- 定义一个
@ControllerAdvice类 - 添加方法
@ExceptionHandler(ResponseStatusException.class) - 返回自定义错误对象(如
ErrorResponse),同时调用ex.getStatus()获取原始状态码
这样既保持抛出简洁,又统一了响应格式。
注意点:别和 @ResponseStatus 混用
@ResponseStatus 是作用在自定义异常类上的注解,而 ResponseStatusException 是运行时抛出的即用型异常。两者目的类似,但后者更轻量、无需提前定义异常类,适合临时、动态场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











