优雅的处理异常
/*
自定义断言类,传入需要判断的集合或者字符串 和 错误信息,如果为空则抛出异常,被全局异常处理器捕获进行对应处理, @Nullable 表示可传入一个null值,@NotNull 表示不可以出入null值
*/
public class MyAssert {
/**
* 断言 字符串为空,抛异常
*
* @param str
* @param message
*/
public static void check(boolean flag, String message) {
if (flag) {
throw new TarsPluralismException(message);
}
}
/**
* 断言 字符串为空,抛异常
*
* @param str
* @param message
*/
public static void isNull(@Nullable Object str, String message) {
check(str == null || StringUtils.isBlank(str.toString()), message);
}
/**
* 断言 集合为空 抛异常
*
* @param <T>
* @param collection
* @param message
*/
public static <T> void isEmpty(@Nullable Collection<T> collection, String message) {
check(CollectionUtils.isEmpty(collection), message);
}
}
/*
全局异常处理器,捕获Exception异常,如果抛出的异常属于Exception,进行对应的处理
*/
@Slf4j
@RestControllerAdvice
public class TarsPluralismExceptionConfig {
@ExceptionHandler(value = Exception.class)
public HttpResponse exception(Exception exception, HttpServletRequest request) {
if (exception instanceof TarsPluralismException) {
TarsPluralismException tarsPluralismException = (TarsPluralismException) exception;
log.info("{}-{}-{}", request.getRequestURI(), request.getMethod(), tarsPluralismException.getRespDesc());
return new HttpResponse(tarsPluralismException.getRespDesc());
}
log.error("{}-{}-{}", request.getRequestURI(), request.getMethod(), exception);
return new HttpResponse("系统异常");
}
}
/*
代码中的应用,这样子进行异常的处理,避免了大量的if/else判断,使得代码比较简洁
*/
public static void main (String args){
List list = new List();
MyAssert.isEmpty(list,"List不可以为空");
...
...
...
}