讲师中心 微信公众号

工具推荐

视频效率加速
立刻MV
立刻MV

低成本歌曲 MV、视频生成

updream

一键生成高质量推广成片

剧云
剧云

中文短剧剧本制作平台

Seko
Seko

AI短剧一键生成成片

在Java中如何统一处理应用层异常_Java全局异常处理设计说明

胖辰小哥_6248

胖辰小哥_6248

发布时间:2026-02-12 17:50:58

|

504人浏览过

|

来源于php中文网

原创

@ControllerAdvice是Spring Boot中统一捕获Controller层异常的最有效方式,需配合@ExceptionHandler使用,按业务分组定义、限定basePackages范围,返回ResponseEntity,且不处理Filter/Interceptor等MVC外异常。

在java中如何统一处理应用层异常_java全局异常处理设计说明

Spring Boot中用@ControllerAdvice捕获所有Controller异常

绝大多数Web应用的业务异常都发生在Controller层或其调用链中,@ControllerAdvice是最直接有效的统一拦截点。它能覆盖所有@RestController和@Controller类抛出的未被捕获异常,包括RuntimeException及其子类、受检异常(如果没在方法签名中声明)。

  • 必须配合@ExceptionHandler使用,每个方法指定处理一类异常,例如@ExceptionHandler(NullPointerException.class)
  • 推荐按业务分组定义多个@ControllerAdvice类(如ValidationAdvice、BusinessExceptionAdvice),避免单个类膨胀
  • 注意@ControllerAdvice默认作用于所有包,可通过basePackages限定扫描范围,防止误拦截第三方库异常
  • 返回值建议用ResponseEntity<result></result>而非String或ModelAndView,便于统一状态码和JSON结构

区分@ResponseStatus和@ExceptionHandler的适用场景

@ResponseStatus只适合简单、无逻辑分支的异常映射,比如404、401这类标准HTTP状态码;而@ExceptionHandler支持完整Java方法体,可记录日志、调用服务、动态构造响应体。

  • @ResponseStatus(code = HttpStatus.NOT_FOUND)只能加在异常类上(如自定义ResourceNotFoundException),无法做条件判断或补充字段
  • @ExceptionHandler方法内可调用log.error("ID={} not found", id, e),也可根据环境决定是否返回堆栈信息
  • 两者不互斥:可为异常类标注@ResponseStatus作兜底,再用@ExceptionHandler覆盖特定逻辑
  • 若同时存在,@ExceptionHandler优先级更高,@ResponseStatus会被忽略

全局异常处理器必须避开Filter和Interceptor中的异常

@ControllerAdvice只拦截进入DispatcherServlet之后的异常,Filter、Interceptor、Servlet容器层(如400 Bad Request)、跨域预检失败等都不在其范围内。

Java调试
Java调试

通过 JDWP 实现 Java 远程调试:连接远程 JVM、设置断点、单步执行代码、查看变量值、获取调用栈。适用于需要调试远程 Java 应用、排查运行时状态、追踪代码执行流程的场景。 术语注解 JDWP:Java Debug Wire Protocol,Java 调试有线协议(Java 远程调试底层通信协议) remote JVM:远程 Java 虚拟机 step through code:代码单步调试(步入 / 步过 / 步出调试) inspect variables:变量查看 / 变量检视 stac

下载
  • Filter中抛出的异常会直接触发容器默认错误页(如Tomcat的Whitelabel Error Page),需在web.xml或ErrorPageRegistrar中注册/error路径接管
  • Interceptor的preHandle异常不会被@ControllerAdvice捕获,应在内部try-catch并转为ResponseEntity返回
  • JSON解析失败(如字段类型不匹配)触发的是HttpMessageNotReadableException,属于Spring MVC异常体系,可被@ExceptionHandler捕获,但需确保该异常未被更早的HandlerExceptionResolver吞掉

自定义异常基类要重写fillInStackTrace()提升性能

频繁抛出异常时,Throwable.fillInStackTrace()是主要开销来源,尤其在日志记录或监控埋点密集的场景下。业务异常通常不需要完整堆栈,跳过它能降低30%+异常构造耗时。

立即学习“Java免费学习笔记(深入)”;

  • 继承RuntimeException后,在构造函数中显式调用super(null),再重写fillInStackTrace()返回this
  • 仅对明确不需排查调用链的异常(如ParamInvalidException、AuthFailedException)做此优化
  • 保留堆栈的异常(如ServiceUnavailableException)仍应调用父类fillInStackTrace()
  • 注意:IDE调试时可能看不到堆栈,需依赖日志中的cause或主动打印e.getStackTrace()
实际项目中最容易被忽略的是异常传播边界——不是所有“抛出来”的异常都会走到@ControllerAdvice,得先确认它真正在MVC流程里。比如CompletableFuture异步回调里的异常、ScheduledTask中的异常、甚至MyBatis的SQLException包装链,都可能绕过常规拦截路径。

热门AI工具

更多
函子Zion

一款支持AI搭建、可视化编辑和多端发布的全栈无代码开发平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

讯飞智文

一款面向学习和办公场景的AI文档创作工具,可辅助生成PPT与Word文档,提高资料整理和内容制作效率。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

相关专题

更多
如何配置Tomcat环境变量
如何配置Tomcat环境变量

配置Tomcat环境变量需要在系统中添加CATALINA_HOME变量,并将Tomcat的安装路径添加到PATH变量中。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

945

2023.10.26

idea如何集成Tomcat
idea如何集成Tomcat

idea集成Tomcat的步骤:1、添加Tomcat服务器配置;2、配置项目部署;3、运行Tomcat服务器;4、访问项目;5、注意事项;6、关闭Tomcat服务器。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

324

2024.02.23

怎么查看Tomcat源代码
怎么查看Tomcat源代码

查看Tomcat源代码的步骤:1、下载Tomcat源代码;2、在IDEA中导入Tomcat源代码;3、查看源代码;4、理解Tomcat的工作原理;5、参与社区和贡献;6、注意事项;7、持续学习和更新;8、使用工具和插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

509

2024.02.23

常见的tomcat漏洞有哪些
常见的tomcat漏洞有哪些

常见的tomcat漏洞有:1、跨站脚本攻击;2、跨站请求伪造;3、目录遍历漏洞;4、缓冲区溢出漏洞;5、配置漏洞;6、第三方组件漏洞。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

305

2024.02.23

tomcat日志乱码怎么解决
tomcat日志乱码怎么解决

tomcat日志乱码的解决办法:1、修改tomcat的日志编码设置;2、检查ide的编码设置;3、检查操作系统的编码设置;4、使用过滤器处理日志;5、检查外部系统的编码设置;6、检查文件编码方式等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

348

2024.02.23

weblogic和tomcat有哪些区别
weblogic和tomcat有哪些区别

weblogic和tomcat的区别:1、功能;2、性能;3、规模;4、价格;5、安全性;6、配置和管理;7、社区支持;8、集成能力;9、升级和更新;10、可靠性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

349

2024.02.23

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

601

2024.02.23

tomcat启动闪退怎么解决
tomcat启动闪退怎么解决

tomcat启动闪退的解决办法:1、检查java环境;2、检查环境变量配置;3、检查端口被占用;4、检查配置文件编码;5、检查启动时需要的配置文件;6、检查相关文件是否丢失;7、检查防火墙和杀毒软件设置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

322

2024.02.23

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

0

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn