springboot全局异常怎么处理

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方法中,实现异常的具体业务逻辑即可。比如我们保存错误信息,发送邮件通知等操作。也可以自定义异常去捕获。

欢迎关注我

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容