首页 > 编程语言 > 详细

springBoot2.X配置全局捕获异常

时间:2020-10-04 00:17:40      阅读:36      评论:0      收藏:0      [点我收藏+]

先来看一段代码:当传入的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和全局异常处理类,加上去。

技术分享图片

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

springBoot2.X配置全局捕获异常

原文:https://www.cnblogs.com/liufei2/p/13765947.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!