Springboot异常处理
Posted 香菜+
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Springboot异常处理相关的知识,希望对你有一定的参考价值。
系列文章:https://gamwatcher.blog.csdn.net/article/details/124603278
1、异常分类
在日常开发时,总会有这样那样的异常,大致可以分为下面几类
1. 参数异常:前端上传数据格式,或者参数缺少等问题
2. 数据库异常:访问数据库时候的一些异常,比如断线,超时等
3. 业务异常:业务过程中产生或者主动抛出的异常,比如服务调用异常,服务错误异常、逻辑业务异常等等
4. 未知异常:不属于以上三种异常的情况,
2、Springboot异常
SpringBoot 内置了了异常的响应,可以通过/error请求查看效果,或者使用不存在的地址访问
3、异常的处理
3.1 常规操作 @ExceptionHandler
@ExceptionHandler:负责处理 controller 标注的类中抛出的异常的注解
@RestControllerAdvice:能够将 @ExceptionHandler 标注的方法集中到一个地方进行处理的注解,这个注解是复合注解,实现了
@ControllerAdvice和@ResponseBody的功能。为所有的 Controller 织入增强方法
3.2 定制404 异常
因为现在应用都是前后端分离,在访问一些不存在的地址的时候做一些特殊定制。
默认情况下,SpringBoot是不会抛出404异常的,所以@ControllerAdvice也不能捕获到404异常。我们可以通过以下配置来让这个注解能捕获到404异常。
spring:
mvc:
throw-exception-if-no-handler-found: true
web:
resources:
add-mappings: false
throw-exception-if-no-handler-found:当发现404异常时直接抛出异常。
add-mappings:关闭默认的静态资源路径映射。这样404错误也能被捕获到,但是这个配置会让你的静态资源访问出现问题,也就是不适合前后端不分离的情况。
3.3 过滤器异常无法捕获原因
ControllerAdvice不能捕获过滤器抛出的异常,对于此类异常需要特别处理。异常处理需要设置特别的处理类。
BasicErrorController不经过过滤器,tomcat直接调用了BasicErrorController,把结果作为原来请求的返回。客户端没有真的去请求BasicErrorController,也就没有经过过滤器一说
4、show me code
写个异常的处理类吧
@ControllerAdvice
public class GlobalExceptionHandler
/**
* 处理其他异常
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ResultVO exceptionHandler(Exception e)
return new ResultVO("500","",null);
/**
* 处理业务异常
*/
@ExceptionHandler(value = BzException.class)
@ResponseBody
public ResultVO bzExceptionHandler(Exception e)
return new ResultVO("501","",null);
/**
* 处理数据库异常
*/
@ExceptionHandler(value = DBException.class)
@ResponseBody
public ResultVO DBExceptionHandler(Exception e)
return new ResultVO("502","",null);
这里自定义了三个异常,可以开发中根据需求将异常进行分类
这里的异常码是随便写的,在开发中可以定义枚举,将具体的报错信息放入枚举中
5、总结
异常处理这个没有太深入,因为现在基本上这种方式就解决了大部分问题
赠人玫瑰,手留余香,求关注,点赞,收藏
1本书精通剪映手机版+电脑版:63个抖音热门影视特效案例剖析+103集同步教学视频+132个练习素材文件+精美的PPT课件,28万粉丝都喜欢的影视剪辑与特效制作技巧,让你快速成长为行业大咖!
以上是关于Springboot异常处理的主要内容,如果未能解决你的问题,请参考以下文章