优雅的处理异常

  • 自定义断言类
  • 全局处理异常
/*
	自定义断言类,传入需要判断的集合或者字符串 和 错误信息,如果为空则抛出异常,被全局异常处理器捕获进行对应处理, @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不可以为空");
    ...
    ...
    ...
}