七、SpringBoot全局异常捕获

本文详细介绍如何在SpringBoot项目中实现全局异常捕获,包括引入Maven依赖、编写异常处理类、控制器代码示例及视图返回方式,助力开发者轻松掌握异常统一管理技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

​ 在项目使用全局异常捕获,可以简化我们的代码,做到异常统一管理返回的效果。本节我们来学学springboot项目中是如何来全局捕获异常。

1、引入Maven依赖

​ 由于本节的实战,我们会学习一下JSON封装返回和视图返回这两种方式。视图返回使用FreeMarker来演练。

	<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </dependency>
        <!-- FreeMarker依赖包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
    </dependencies>

2、编写全局异常捕获类

我们可以在启动类同级包以及子级包下新增全局异常捕获类,并在该类上使用注解**@ControllerAdvice**,它是一个Controller的切面。

/**
 * @author 小吉
 * @description springboot全局异常捕获
 * @date 2020/5/29
 */
@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public Map handler500(Exception e){
        e.printStackTrace();
        Map map = new HashMap();
        map.put("status",false);
        map.put("message","服务异常!");
        return map;
    }
}

3、编写控制器

我们尝试在控制器中加上报错的代码,用来测试一下全局异常的捕获。

/**
 * @author 小吉
 * @description
 * @date 2020/5/29
 */
@RestController
public class IndexController {

    @RequestMapping("index")
    @ResponseBody
    public String index(){
        int i = 1 / 0;
        return "SpringBoot全局异常捕获";
    }
}

启动类

/**
 * @author 小吉
 * @description springboot启动类
 * @date 2020/5/29
 */
@SpringBootApplication
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class,args);
    }
}

启动应用后在控制台上可以看到springboot已经加载好异常处理。
在这里插入图片描述
在这里插入图片描述

当看到浏览器上返回我们的报错信息,证明全局异常捕获生效。

以上就是全局异常捕获返回json信息。接下来我来介绍视图返回方式。

4、视图返回

我们可以借助ModelAndView来实现视图返回。

/**
 * @author 小吉
 * @description springboot全局异常捕获
 * @date 2020/5/29
 */
@ControllerAdvice
public class GlobalExceptionHandler {

//    @ExceptionHandler(Exception.class)
//    @ResponseBody
//    public Map handler500(Exception e){
//        e.printStackTrace();
//        Map map = new HashMap();
//        map.put("status",false);
//        map.put("message","服务异常!");
//        return map;
//    }

    @ExceptionHandler(Exception.class)
    public ModelAndView handler500(Exception e){
        e.printStackTrace();
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("message","服务异常!");
        modelAndView.setViewName("500");
        return modelAndView;
    }
}

在src/main/resources下创建templates目录,新建500.ftl

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8" />
    <title></title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值