Vertx之Exception异常统一处理拦截

介绍

Vertx统一异常拦截处理

1. maven项目依赖

<dependency>
	<groupId>io.vertx</groupId>
	<artifactId>vertx-web</artifactId>
</dependency>
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
	<groupId>com.lance.common</groupId>
	<artifactId>vertx-common-core</artifactId>
	<version>0.0.1-SNAPSHOT</version>
</dependency>

2.统一异常定义

public class AbsException extends RuntimeException {
	public AbsException() {
	}

	public AbsException(String message) {
		super(message);
	}

	public AbsException(String message, Throwable cause) {
		super(message, cause);
	}

	public AbsException(Throwable cause) {
		super(cause);
	}

	public AbsException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
		super(message, cause, enableSuppression, writableStackTrace);
	}
}
public class ServiceException extends AbsException {
	private final static String DEFAULT_FAIL_CODE = "-1";
	private final static String DEFAULT_MESSAGE = "failure";
	@Getter
	private final String code;

	private ServiceException(String code, String message, Throwable cause) {
		super(message, cause);
		this.code = code;
	}

	public static ServiceException of(String code) {
		return new ServiceException(code, DEFAULT_MESSAGE, null);
	}

	public static ServiceException of(Throwable cause) {
		return new ServiceException(DEFAULT_FAIL_CODE, DEFAULT_MESSAGE, cause);
	}

	public static ServiceException of(String message, Throwable cause) {
		return new ServiceException(DEFAULT_FAIL_CODE, message, cause);
	}

	public static ServiceException of(String code, String message) {
		return new ServiceException(code, message, null);
	}

	public static ServiceException of(String code, String message, Throwable cause) {
		return new ServiceException(code, message, cause);
	}

	public static ServiceException of(IResultCode errorCode) {
		return new ServiceException(errorCode.getCode(), errorCode.getMessage(), null);
	}
}

3.异常统一拦截实现

@Slf4j
public final class DefaultExceptionHandler implements Handler<RoutingContext> {

	private DefaultExceptionHandler() {

	}

	@Override
	public void handle(RoutingContext ctx) {
		Throwable throwable = ctx.failure();
		log.error("===> Default exception fail: ", throwable);

		if (throwable instanceof NullPointerException) {
			ctx.json(R.fail("空指针异常错误."));
			return;
		}

		if (throwable instanceof ServiceException) {
			ServiceException ex = (ServiceException) throwable;
			ctx.json(R.fail(ex.getCode(), ex.getMessage()));
			return;
		}

		// 定义其他异常类型
		// .......

		ctx.json(R.fail(ResultCode.FAILURE));
	}

	public static DefaultExceptionHandler of() {
		return new DefaultExceptionHandler();
	}
}

4.异常统一拦截配置

//统一异常处理拦截
mainRouter.route().last().failureHandler(DefaultExceptionHandler.of());

5.项目完整地址

Vertx之Exception异常统一处理拦截 Github 地址

Vertx之Exception异常统一处理拦截 Gitee 地址

上一篇:Java中RuntimeException和Exception的区别


下一篇:xamarin--调试显示详细的错误信息设置