springboot的全局异常处理

很简单很实用:
不用写繁杂的代码,可以对异常进行统一的处理,和返回.
创建一个类: CustomExceptionHandler
在类名上加上注解: @Slf4j @RestControllerAdvice
然后定义异常处理方法:
@ExceptionHandler(value = HttpMessageNotReadableException.class)
public ResponseEntity HttpMessageNotReadableException(HttpMessageNotReadableException ex) {
ex.printStackTrace();
return ResponseEntity.status(HttpStatus.OK).body(R.fail(“数据异常”));
}

注解中的value指明异常的类型. 方法名可以任意定,方法内是对于该异常的统一处理方法.
如果想处理其它异常,重新定义一个value就行.value的值可以为一个,也可以为多个

异常类型,可以指的很细,也可以指的很宽,比如,所有的异常,你都统一处理一下,你直接value写
Exception.class就行了.

我用全局异常捕捉的时候,有一些小问题,sql相关的异常往往捕捉不到,具体异常名称我忘记了,最后用了一个DataAccessException异常代替,才能捕捉到这个异常.这个解决了一部分问题,但是一些DataIntegrityViolationException,一直捕捉不到,我还以为是什么特殊的疑难杂症,一直都挺忙,也没时间去仔细的看一下,直到有一天,我发现项目里面有三个全局异常捕捉.我当时还没意识到问题,直到我整理代码的时候,删除了两个,留下了我的,这个问题便不攻自破,我怀疑是统一异常处理类冲突了,没有走我设定的那个异常处理类.所以,同类型的配置类代码,如果发现多个,就要有一定的警醒.

你可能感兴趣的:(个人笔记)