SpringBoot -- @RestControllerAdvice 注解
前言
在 SpringBoot 中,通常使用注解 @RestControllerAdvice 来做全局统一异常处理。
@RestControllerAdvice 用在类上,对 Controller 进行增强的,可以全局捕获 spring mvc 抛的异常。
@ExceptionHandler(value = Exception.class)
@ExceptionHandler 用在方法上,作用是用来捕获指定的异常。
源码分析
@RestControllerAdvice = @ControllerAdvice + @ResponseBody
@RestControllerAdvice 的源码如下:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@ControllerAdvice
@ResponseBody
public @interface RestControllerAdvice {
@AliasFor(
annotation = ControllerAdvice.class
)
String[] value() default {};
@AliasFor(
annotation = ControllerAdvice.class
)
String[] basePackages() default {};
@AliasFor(
annotation = ControllerAdvice.class
)
Class<?>[] basePackageClasses() default {};
@AliasFor(
annotation = ControllerAdvice.class
)
Class<?>[] assignableTypes() default {};
@AliasFor(
annotation = ControllerAdvice.class
)
Class<? extends Annotation>[] annotations() default {};
}
如果在运行时发现了异常,希望将异常统一返回,这里就需要用到 @RestControllerAdvice。
示例
新建一个全局异常处理类:GlobalExceptionHandler
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(SQLException.class)
public RespBean sqlException(SQLException e){
if (e instanceof SQLIntegrityConstraintViolationException){
return RespBean.error("该数据有关联数据,操作失败!");
}
return RespBean.error("数据库异常!");
}
}
这个类的含义就是,如果运行过程中,抛出 SQLException 异常或者 SQLIntegrityConstraintViolationException 异常,统一由这个类进行处理,返回统一的异常信息提示。
参考资源
https://blog.csdn.net/qq_35098526/article/details/88949425
https://www.jianshu.com/p/47aeeba6414c
每天学习一点点,每天进步一点点。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 开发的设计和重构,为开发效率服务
· 从零开始开发一个 MCP Server!
· Ai满嘴顺口溜,想考研?浪费我几个小时
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想