七、SpringBoot全局异常捕获

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

1、引入Maven依赖

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

	<parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.0.0.RELEASEversion>
    parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-tomcatartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-freemarkerartifactId>
        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已经加载好异常处理。
七、SpringBoot全局异常捕获_第1张图片
在这里插入图片描述

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

以上就是全局异常捕获返回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


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

七、SpringBoot全局异常捕获_第2张图片

你可能感兴趣的:(SpringBoot实战,java,spring,spring,boot)