技术派全局异常处理
大家好,我是技术派的二哥呀。
今天由我来给大家讲一下技术派中的全局异常处理,全局异常处理是 Java 后端开发中不可或缺得有一部分,可以提高代码的健壮性和可维护性。
在我们的开发中,总是难免会碰到一些未经处理的异常,假如没有做全局异常处理,那么我们返回给用户的信息应该是不友好的,很抽象的,用户会认为我们的程序是不安全的。
相反,如果有了全局异常处理,那么我们就可以给用户提供更友好的反馈。
我们甚至可以把全局异常处理写到简历上,比如说你可以这样描述:项目采用了 HandlerExceptionResolver(或者 ControllerAdvice 方案)的全局异常处理策略,提高了代码的健壮性和可维护性,优化了用户体验。
我会结合具体的业务场景给大家一种身临其境的感觉(😁),讲一讲 HandlerExceptionResolver 和 ControllerAdvice 具体怎么在项目中使用。
业务场景
技术派整合了 Redis,这个我们前面讲过了,比如说用户登录的时候会从 Redis 中取缓存,那假如我们本地没有启动 Redis 服务。

然后我们在本地启动技术派的服务端。

然后点击登录→一键登录。

然后就会收到这样一条提示信息。

由于我们项目是开源的,所以这里就直接把服务端的信息返回出来,好让大家第一时间辨别出是哪里出了问题,可以及时去调整。
当你看到这样一条错误提示,第一时间就能明白,哦,原来是 Redis 没有启动啊。
在服务器端的控制台面板中(错误堆栈信息中),可以找到对应的错误信息。

其中 ForumExceptionHandler 就是用来进行全局异常处理的,它是 HandlerExceptionResolver 接口的实现类。

HandlerExceptionResolver
HandlerExceptionResolver 是 Spring 提供的一种异常处理机制,它允许我们在应用程序中以统一的方式处理控制器方法引发的异常。
要使用 HandlerExceptionResolver,我们需要创建一个实现该接口的类,并在其中定义如何处理异常。例如:
@Slf4j
@Order(-100)
public class ForumExceptionHandler implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
}
}
@Slf4j是 lombok 提供的一个日志注解。@Order注解用于指定 Spring 中组件的加载顺序。它接受一个整数值,数值越小,组件的优先级越高,加载顺序越靠前。- 在 resolveException 方法中,我们可以自定义异常处理逻辑,根据异常类型返回不同的 ModelAndView。
我们来看一下 resolveException 方法中的具体写法:
Status errStatus = buildToastMsg(ex);
if (restResponse(request, response)) {
// 表示返回json数据格式的异常提示信息
if (response.isCommitted()) {
// 如果返回已经提交过,直接退出即可
return new ModelAndView();
}
try {
response.reset();
// 若是rest接口请求异常时,返回json格式的异常数据;而不是专门的500页面
response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);
response.setHeader("Cache-Control", "no-cache, must-revalidate");
response.getWriter().println(JsonUtil.toStr(ResVo.fail(errStatus)));
response.getWriter().flush();
return new ModelAndView();
} catch (Exce...未能定位到原文的划线
企业级Agent工作流编排项目PaiFlow
Vibe Coding版本的PaiAgent
派聪明RAG AI知识库Java版本+Go版本
微服务 PmHub、技术派、MYDB
求职派JobClaw(OpenClaw/Hermes架构
PaiCLI(类似Claude Code的Agent
派简历(代码已完成)
等实战项目。
1. 微信扫右侧的优惠券加入知识星球
2. 解锁星球的实战项目教程和源码: 项目源码+教程获取
真诚点赞 诚不我欺
回复