【Tools】SpringBoot工程下的全局异常处理

SpringBoot工程下的全局异常处理

一、需求

程序运行过程中没法保证一定不会出错,即程序中会报异常,而系统默认的异常信息的格式往往和我们自定义返回的消息格式不一致,还会影响返回到前端的页面,这里SpringMVC为我们提供了一种全局异常处理器,可以根据异常的类型捕获程序运行过程中可能会抛出的异常,从而对异常进行处理,包括捕获到这个异常给前端返回什么消息等等。

二、实现

处理异常一般有两种方式:

  • 使用try-catch语句直接在控制器中对异常进行处理(较为繁琐)
  • 使用全局异常处理器(SpringMVC提供)

这里主要介绍全局异常处理器,使用全局异常处理器可以通过添加注解(@RestControllerAdvice)来实现或者通过实现HandlerExceptionResolver接口来实现(这种方式更加灵活,但需要编写的代码也更繁琐),下面介绍通过注解的方式添加全局异常处理器。

  1. 创建一个全局处理异常类(一般取名-GlobalExceptionHandler);

  2. 添加注解@RestControllerAdvice到全局异常处理类上面,(这个是ControllerAdvice和ResponseBody的复合注解,用于返回json类型的数据);

  3. 定义异常处理的方法,在这个方法上添加@ExceptionHandler注解(可指明需要捕获的异常类型);

  4. 添加异常方法形参(一般和@ExceptionHandler注解中指明的异常类类型保持一致)

  5. 最后在方法内自定义怎么处理这个异常,需要返回什么格式的消息即可。

  6. 一个小Demo(注意异常类放到启动类的包或者子包下面,让Spring容器扫描到)

    @Slf4j
    @RestControllerAdvice
    public class GlobalExceptionHandler {
    
        @ExceptionHandler(RuntimeException.class)
        @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) //手动设置该方法被调用时返回的状态码,而不是使用默认的状态码
        public ResultData<String> getGlobalExceptionHand(RuntimeException e){
    
            ResultData<String> resultData = new ResultData<>();
    
            resultData.setCode(ReturnCodeEnum.RC500.getCode());
            resultData.setMessage(e.getMessage());
            resultData.setData("服务器内部故障!");
    
            return resultData;
    
        }
    
    
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值