springBoot2.X配置全局捕获异常

先来看一段代码:当传入的id是0的时候,就会报异常。

@RestController
public class HelloController {

    @GetMapping("/getUser")
    public String getUser(int id) {
        int j = 1 / id;
        return "SUCCESS" + j;
    }

}

访问时:
在这里插入图片描述
我们知道这个页面要是给用户看到,用户可能不知道这是什么。

方法一:将异常捕获

@GetMapping("/getUser")
    public String getUser(int id) {
        int j;
        try {
            j = 1 / id;
        } catch (Exception e) {
            return "系统异常";
        }
        return "SUCCESS" + j;
    }

这种方法当然可以,但是当我们有很多方法时,需要在每个方法上都加上。
哎,太鸡肋了吧。
那么都没有全局的拦截处理呢?
当然了

方法二:通过@ControllerAdvice注解配置

/**
 * @Author 刘翊扬
 * @Date 2020/9/30 11:39 下午
 * @Version 1.0
 */
@ControllerAdvice(basePackages = "com.yiyang.myfirstspringdemo.controller")
public class GlobalExceptionHandler {

    @ExceptionHandler(RuntimeException.class)
    @ResponseBody
    public Map<String,Object> errorResult()  {
        Map<String, Object> map = new HashMap<>();
        map.put("errorCode", "500");
        map.put("errorMsg", "全局捕获异常");
        return map;

    }
}

@ExceptionHandler 表示拦截异常
@ControllerAdvice 是 controller 的一个辅助类,最常用的就是作为全局异常处理的切面类
@ControllerAdvice 可以指定扫描范围

注意:下面还需要在启动类上加上,否则诶呦效果

package com.yiyang.myfirstspringdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication(scanBasePackages = {"com.yiyang.myfirstspringdemo.error", "com.yiyang.myfirstspringdemo.controller"})
public class MyFirstSpringDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyFirstSpringDemoApplication.class, args);
    }

}

在启动类上,将扫描包范围controller和全局异常处理类,加上去。

在这里插入图片描述

这样当我们在访问的时候,出现的异常提示信息就是我们在全局异常处理中设置的返回值。

posted @ 2020-10-03 23:32  刘翊扬  阅读(240)  评论(0编辑  收藏  举报