业务异常的处理

1.通过try{ } catch{ }捕获异常处理

2.SpringMVC的全局异常处理器

 第一种方式(不常用)

 @DeleteMapping(value = "/baseTrademark/remove/{id}")
 public Result delBaseTrademark(@PathVariable Long id) {
     try {
         baseTrademarkService.delBaseTrademark(id);
         return Result.ok();
     } catch (GmallException e) {
         ResultCodeEnum resultCodeEnum = e.getResultCodeEnum();
         return Result.build(null,resultCodeEnum);
     }
 }

 第二种方式:

配置一个全局处理异常的类

@RestControllerAdvice  //代表这个类是全局异常处理器  @ControllerAdvice + @ResponseBody
public class GlobalExceptionHandler {

        @ExceptionHandler(value = GmallException.class)
        public Result gmallGlobalExceptionHandler(GmallException e){
                e.printStackTrace();
                return Result.build(null,e.getResultCodeEnum());
        }

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

注意:如果这个类放置的位置不符合启动类的包扫描规则,需要加上@ComponentScan注解,但是这个注解一旦显式的使用,会破坏掉spring boot默认的包扫描规则,所以需要报这个包写大,或使用@Import注解替代


方式二升级:自定义注解

自定义一个注解直接加载启动类上

@Retention(value = RetentionPolicy.RUNTIME)//通过jdk元注解设置注解的存活时期为运行时期

@Target(value = ElementType.TYPE)  //通过jdk元注解设置注解的使用位置在类上

@Import(value = GlobalExceptionHandler.class) //@Import作用:把一个类导入到spring容器中,如果被导入的类是一个配置类,那么在该配置中所定义的bean同样会被导入到spring容器中
public @interface EnableGlobalExceptionHandler {

}

方式二在升级:spring boot自动化配置

spring boot自动化配置原理:在项目启动的时候class path路径下META-INFO文件夹中的spring.factories中的内容会被自动读取,读取的是一个个键值对,该建所对应的值就是配置类的全类名,然后通过导入器(ImportSelector)将这个类导入到spring容器中,在该类中所配置的那些类也被导入到了spring容器中,并配合条件注解来决定当前这个配置是否生效.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值