springboot全局异常怎么处理

本文详细介绍如何在SpringBoot项目中实现全局异常处理,通过RestControllerAdvice注解,自定义异常处理类,统一处理各种异常情况,包括参数错误、请求方式错误及数据格式不一致等问题,提升应用程序的健壮性和用户体验。

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

springboot全局异常怎么处理

实际开发中,我们代码中异常情况肯定五花八门,在测试的情况下什么都正常,上线了就问题多多。那我们怎么才能对异常能全局去处理,方便记录和查找问题。

异常分类

看了这个图大概明白了我们异常该怎么去处理了吧。我们要拦截的异常就这样。

RestControllerAdvice注解方式

这个注解的使用:在请求到达controller之前的参数错误,请求方式错误,数据格式不一致问题都可以拦截到。

/**
 * 全局异常处理类
 * @author yangwei
 *
 * 用于全局返回json,如需返回ModelAndView请使用ControllerAdvice
 * 继承了ResponseEntityExceptionHandler,对于一些类似于请求方式异常的异常进行捕获
 */
@RestControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {

    private static Properties properties = ReadPropertiesUtil.getProperties(System.getProperty("user.dir")   CommonUrl.RESPONSE_PROP_URL);

    /**
     * 重写handleExceptionInternal,自定义处理过程
     **/
    @Override
    protected ResponseEntity<Object> handleExceptionInternal(Exception ex, Object body, HttpHeaders headers, HttpStatus status, WebRequest request) {
        //这里将异常直接传给handlerException()方法进行处理,返回值为OK保证友好的返回,而不是出现500错误码。
        return new ResponseEntity<>(handlerException(ex), HttpStatus.OK);
    }

    /**
     * 异常捕获
     * @param e 捕获的异常
     * @return 封装的返回对象
     **/
    @ExceptionHandler(Exception.class)
    public ReturnVO handlerException(Throwable e) {
        ReturnVO returnVO = new ReturnVO();
        String errorName = e.getClass().getName();
        errorName = errorName.substring(errorName.lastIndexOf(".")   1);
        //如果没有定义异常,而是直接抛出一个运行时异常,需要进入以下分支
        if (e.getClass() == RuntimeException.class) {
            returnVO.setMessage(properties.getProperty(valueOf("RuntimeException").msg())  ": "  e.getMessage());
            returnVO.setCode(properties.getProperty(valueOf("RuntimeException").val()));
        } else {
            returnVO.setMessage(properties.getProperty(valueOf(errorName).msg()));
            returnVO.setCode(properties.getProperty(valueOf(errorName).val()));
        }
        return returnVO;
    }
}

我们只需要在handlerException方法中,实现异常的具体业务逻辑即可。比如我们保存错误信息,发送邮件通知等操作。也可以自定义异常去捕获。

欢迎关注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值