ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Vertx之Exception异常统一处理拦截

2022-01-06 16:03:12  阅读:292  来源: 互联网

标签:Exception code ServiceException String message 拦截 cause public Vertx


介绍

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 地址

标签:Exception,code,ServiceException,String,message,拦截,cause,public,Vertx
来源: https://blog.csdn.net/li6151770/article/details/122345897

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有