全局异常处理器

@RestControllerAdvice 是 Spring 框架中的一个注解,它结合了 @ControllerAdvice@ResponseBody 两个注解的功能。

@ControllerAdvice 用于定义全局控制器异常处理器,可以为多个控制器中的异常提供统一的处理方式。而 @ResponseBody 则表示控制器方法返回的数据直接作为 HTTP 响应体,而不是渲染为 HTML 视图。

因此,@RestControllerAdvice 的作用就是将 @ControllerAdvice@ResponseBody 组合在一起,用于定义全局 RESTful 接口异常处理器,可以在多个控制器中提供统一的异常处理逻辑,并将处理结果直接返回给客户端,通常用于编写 API 接口。

@RestControllerAdvice 注解标记的类中,我们可以定义多个 @ExceptionHandler 注解的方法,用于处理不同的异常。这些方法需要使用 @ResponseBody 注解来指定返回的数据格式,比如 JSON、XML 等。

定义全局异常处理器

@RestControllerAdvice//结合了 @ControllerAdvice 和 @ResponseBody 两个注解的功能。
                    //@ControllerAdvice 用于定义全局控制器异常处理器
                    //@ResponseBody 则表示控制器方法返回的数据直接作为 HTTP 响应体,而不是渲染为 HTML 视图。
public class GlobalExceptionHandler {

    /**
     * 自定义的异常处理器
     * @param e
     * @return
     */
    @ExceptionHandler(value = GmallException.class)
    public Result gmallExceptionHandler(GmallException e) {
        return Result.build(null , e.getResultCodeEnum()) ;
    }

    @ExceptionHandler(value = Exception.class)
    public Result systemExceptionHandler(Exception e) {
        return Result.build(null , ResultCodeEnum.SYSTEM_ERROR) ;
    }

}

注意:需要将全局异常处理器纳入到spring容器中

导入方式1:在启动类上使用@Import注解直接进行导入

@Import(value = GlobalExceptionHandler.class)
public class ProductApplication {}

导入方式2:自定义注解对@Import导入进行数据封装, 启动类上使用自定义注解

@Target(value = ElementType.TYPE)
@Retention(value = RetentionPolicy.RUNTIME)
@Import(value = GlobalExceptionHandler.class)
public @interface EnableGlobalExceptionHandler {

}

导入方式三:spring boot自动化配置的原理就是通过@Import注解导入了一个导入器AutoConfigurationImportSelector,在该导入器中读取了spring-boot-autoconfigure包中的META-INF/spring.factories配置文件中的配置类的全类名,在这些配置类中通过@Bean定义了很多bean,并且结合spring所提供的

条件注解来决定这个bean配置是否生效。

所以:可以在resources创建META-INF/spring.factories文件,并在里面加入需要读取的配置类的全路径类名就可以不需要给启动类加注解了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值