zoukankan      html  css  js  c++  java
  • 在底层框架使用@SneakyThrows注解

    @SneakyThrows注解是由lombok为我们封装的,它可以为我们的代码生成一个try...catch块,并把异常向上抛出来,而你之前的ex.getStackTrace()是没有这种能力的,有时,我们从底层抛出的异常需要被上层统一收集,而又不想在底层new出一大堆业务相关的异常实例,这时使用@SneakyThrows可以简化我们的代码。

    @SneakyThrows为方法添加注解

    import lombok.SneakyThrows;
    
    public class SneakyThrowsExample implements Runnable {
      @SneakyThrows(UnsupportedEncodingException.class)
      public String utf8ToString(byte[] bytes) {
        return new String(bytes, "UTF-8");
      }
      
      @SneakyThrows
      public void run() {
        throw new Throwable();
      }
    }
    

    而它生成的代码为我们加上了try...cache块,并以新的Lombok.sneakyThrow的方式向上抛出

    import lombok.Lombok;
    
    public class SneakyThrowsExample implements Runnable {
      public String utf8ToString(byte[] bytes) {
        try {
          return new String(bytes, "UTF-8");
        } catch (UnsupportedEncodingException e) {
          throw Lombok.sneakyThrow(e);
        }
      }
      
      public void run() {
        try {
          throw new Throwable();
        } catch (Throwable t) {
          throw Lombok.sneakyThrow(t);
        }
      }
    }
    

    而这种方法,在上层被调用时,它产生的异常是可以被向上传递的,并且对它进行业务上的封装,产生业务相关的异常消息

       throw new RepeatSubmitException(
                            String.format("记录正被用户%s锁定,将在%s秒后释放",
                                    currentValue,
                                    redisTemplate.getExpire(key)));
    

    而在上层通过 @RestControllerAdviceExceptionHandler进行统一的捕获即可

     @ExceptionHandler(RepeatSubmitException.class)
        @ResponseStatus(HttpStatus.OK)
        public CommonResult<String> handlerIllegalArgumentException(IllegalArgumentException e) {
            String message = e.getMessage();
            log.error(message);
            return CommonResult.failure(400,message);
        }
    

    picture

  • 相关阅读:
    同样功能的SQL语句,写成参数和写成常量怎么效率会有那么大的差别
    遭遇钓鱼网站
    SQL Server 2005与Oracle同步注意NUMBER类型转换
    Oracle数据类型(转)
    如何使用枚举的组合值
    社保,交得越多亏得越多(转)
    使用OPENXML函数将XML文档转换为行结果集
    发布一个性能测试工具的破解补丁
    如何将SQLServer2005中的数据同步到Oracle中
    Repository模式
  • 原文地址:https://www.cnblogs.com/lori/p/13539999.html
Copyright © 2011-2022 走看看