千家信息网

SpringBoot全局异常处理的使用方法

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,本篇内容主要讲解"SpringBoot全局异常处理的使用方法",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"SpringBoot全局异常处理的使用方法"吧!
千家信息网最后更新 2026年11月04日SpringBoot全局异常处理的使用方法

本篇内容主要讲解"SpringBoot全局异常处理的使用方法",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"SpringBoot全局异常处理的使用方法"吧!

I. 环境搭建

首先得搭建一个 web 应用才有可能继续后续的测试,借助 SpringBoot 搭建一个 web 应用属于比较简单的活;

创建一个 maven 项目,pom 文件如下

    org.springframework.boot    spring-boot-starter-parent    2.1.7         UTF-8    UTF-8    Finchley.RELEASE    1.8            org.springframework.boot        spring-boot-starter-web                com.alibaba        fastjson        1.2.45                                            org.springframework.boot                spring-boot-maven-plugin                                    spring-milestones        Spring Milestones        https://repo.spring.io/milestone                    false            

依然是一般的流程,pom 依赖搞定之后,写一个程序入口

/** * Created by @author yihui in 15:26 19/9/13. */@SpringBootApplicationpublic class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class);    }}

II. 异常处理

1. @ControllerAdvice

我们通常利用@ControllerAdvice配合注解@ExceptionHandler来实现全局异常捕获处理

  • @ControllerAdvice为所有的 Controller 织入增强方法

  • @ExceptionHandler标记在方法上,表示当出现对应的异常抛出到上层时(即没有被业务捕获),这个方法会被触发

下面我们通过实例进行功能演示

a. 异常捕获

我们定义两个异常捕获的 case,一个是除 0,一个是数组越界异常

@Slf4j@ControllerAdvicepublic class GlobalExceptionHandler {    public static String getThrowableStackInfo(Throwable e) {        ByteArrayOutputStream buf = new ByteArrayOutputStream();        e.printStackTrace(new java.io.PrintWriter(buf, true));        String msg = buf.toString();        try {            buf.close();        } catch (Exception t) {            return e.getMessage();        }        return msg;    }    @ResponseBody    @ExceptionHandler(value = ArithmeticException.class)    public String handleArithmetic(HttpServletRequest request, HttpServletResponse response, ArithmeticException e)            throws IOException {        log.info("divide error!");        return "divide 0: " + getThrowableStackInfo(e);    }    @ResponseBody    @ExceptionHandler(value = ArrayIndexOutOfBoundsException.class)    public String handleArrayIndexOutBounds(HttpServletRequest request, HttpServletResponse response,            ArrayIndexOutOfBoundsException e) throws IOException {        log.info("array index out error!");        return "aryIndexOutOfBounds: " + getThrowableStackInfo(e);    }}

在上面的测试中,我们将异常堆栈返回调用方

b. 示例服务

增加几个测试方法

@Controller@RequestMapping(path = "page")public class ErrorPageRest {    @ResponseBody    @GetMapping(path = "divide")    public int divide(int sub) {        return 1000 / sub;    }    private int[] ans = new int[]{1, 2, 3, 4};    @ResponseBody    @GetMapping(path = "ary")    public int ary(int index) {        return ans[index];    }}
c. 测试说明

实例测试如下,上面我们声明捕获的两种异常被拦截并输出对应的堆栈信息;

但是需要注意

  • 404 和未捕获的 500 异常则显示的 SpringBoot 默认的错误页面;

  • 此外我们捕获返回的 http 状态码是 200

2. @ResponseStatus

上面的 case 中捕获的异常返回的状态码是 200,但是在某些 case 中,可能更希望返回更合适的 http 状态码,此时可以使用ResponseStatus来指定

使用方式比较简单,加一个注解即可

@ResponseBody@ExceptionHandler(value = ArithmeticException.class)@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)public String handleArithmetic(HttpServletRequest request, HttpServletResponse response, ArithmeticException e)        throws IOException {    log.info("divide error!");    return "divide 0: " + getThrowableStackInfo(e);}

3. 404 处理

通过@ControllerAdvice配合@ExceptionHandler可以拦截 500 异常,如果我希望 404 异常也可以拦截,可以如何处理?

首先修改配置文件application.properties,将NoHandlerFoundException抛出来

# 出现错误时, 直接抛出异常spring.mvc.throw-exception-if-no-handler-found=true# 设置静态资源映射访问路径,下面两个二选一,spring.mvc.static-path-pattern=/statics/**# spring.resources.add-mappings=false

其次是定义异常捕获

@ResponseBody@ExceptionHandler(value = NoHandlerFoundException.class)@ResponseStatus(HttpStatus.NOT_FOUND)public String handleNoHandlerError(NoHandlerFoundException e, HttpServletResponse response) {    return "noHandlerFound: " + getThrowableStackInfo(e);}

再次测试如下,404 被我们捕获并返回堆栈信息

到此,相信大家对"SpringBoot全局异常处理的使用方法"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

方法 处理 测试 全局 使用方法 堆栈 状态 两个 信息 内容 实例 文件 注解 错误 面的 UTF-8 学习 应用 合适 实用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳市人人互联网科技有限公司 亿人帮互联网科技有限公司 上海卓越科技互联网 互联网金融 金融科技 深圳互联网络科技有限公司 互联网 科技创业 互联网科技缩写 广州善班互联网科技 互联网科技视频素材 互联网金融监管科技 甘肃拓世互联网科技有限公司 湖南诚度互联网科技有限公司 互联网科技项目计划书材料类 湖南一路畅行互联网科技 坤平互联网科技 锡山区互联网智能科技产品供应 互联网风格科技公司名称 艺电能源互联网科技有限公司招聘 互联网科技创业计划的风险分析 瑞安市蟠桃会互联网科技有限公司 上海卓越科技互联网 为想互联网科技怎么样 善班互联网科技 互联网与新科技 互联网科技汛 玖二柒互联网科技公司待遇 互联网对科技的发展 恒生互联网科技业指数调整周期 抖集互联网科技技术咨询 广州全民伙伴互联网科技有限公司
0