Java中ServerRuntimeException不会自动传递到客户端,需通过统一异常处理器(@ControllerAdvice+@ExceptionHandler)捕获并封装为标准响应体(如Result<T>),设置HTTP 500状态码及业务错误码,隐藏堆栈信息仅返回友好提示,前端须检查状态码与响应体错误字段。

Java中ServerRuntimeException(实际应为RuntimeException的子类,如Spring的ServerErrorException或自定义服务端异常)本身不会自动传递到客户端,它只在服务端抛出并终止当前请求处理。要让客户端感知该错误,必须通过HTTP响应体、状态码和结构化数据显式传递。
统一异常处理器捕获并转换异常
Spring Boot项目推荐使用@ControllerAdvice + @ExceptionHandler全局捕获服务端运行时异常,并封装为标准响应格式返回给前端。
- 定义统一响应体(如
Result<T>),包含code、message、data字段 - 在异常处理器中将
ServerRuntimeException映射为特定业务错误码(如500或自定义9999) - 设置HTTP状态码为
500 INTERNAL_SERVER_ERROR或更精确的503 SERVICE_UNAVAILABLE
避免堆栈信息直接暴露给客户端
生产环境切勿将原始异常堆栈(e.printStackTrace()或e.toString())写入响应体,这会泄露敏感信息。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 记录完整日志(含traceId)供后端排查,但响应中只返回用户友好的提示语(如“服务暂时不可用”)
- 可对不同异常类型做分级:开发环境返回简略堆栈(需开关控制),生产环境仅返回错误码+通用提示
- 若需调试支持,可在响应头中添加
X-Request-ID,便于关联日志
客户端正确解析服务端错误响应
前端需主动检查HTTP状态码和响应体中的错误字段,不能仅依赖2xx成功状态。
立即学习“Java免费学习笔记(深入)”;
- Axios等库默认
status < 200 || status >= 300触发catch,此时error.response包含响应数据 - 建议统一拦截器处理
code !== 0或status === 500的情况,弹窗提示或跳转错误页 - 对特定错误码(如登录过期
401、权限不足403)做定向处理,而非全部当作网络错误
非Spring环境(如原生Servlet或Vert.x)的处理方式
没有框架自动支持时,需手动在doPost/doGet或路由处理器中try-catch并构造响应。
- 捕获
RuntimeException后,设置response.setStatus(500) - 用
response.getWriter().write(JSON字符串)输出结构化错误信息 - 确保设置
Content-Type: application/json;charset=UTF-8

















