0
点赞
收藏
分享

微信扫一扫

在底层框架使用@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)));

而在上层通过 ​​@RestControllerAdvice​​​和​​ExceptionHandler​​进行统一的捕获即可

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

在底层框架使用@SneakyThrows注解_封装

作者:仓储大叔,张占岭,
荣誉:微软MVP

举报

相关推荐

0 条评论