升级Vert.x至4.2.0版本无法导入HttpStatusException问题咨询
Vert.x版本升级HttpStatusException导入报错解决方案
报错原因
- 你引用的
io.vertx.ext.web.handler.impl.HttpStatusException属于Vert.x内部实现类,不在公开API承诺范围内,版本迭代时会被无公告修改或移除,官方文档也不会对这类内部类的变更做公开说明,因此你查询不到相关说明属于正常情况。 - Vert.x 4.1及以上版本已将该异常重构为公开API类
io.vertx.ext.web.handler.HttpException,原impl包下的同名类已被删除,因此4.2版本导入报错。
修复方案
- 替换导入语句
将原导入代码:
import io.vertx.ext.web.handler.impl.HttpStatusException;
替换为:
import io.vertx.ext.web.handler.HttpException;
- 修改代码中的类引用
将代码中所有HttpStatusException替换为HttpException即可,你提供的代码修改后如下:
public void failureHandler(RoutingContext context) { int statusCode = context.statusCode(); String errorMessage; if (context.failure() instanceof HttpException) { errorMessage = context.failure().getMessage(); } else { errorMessage = context.failure().getMessage(); } log.error("fail: {}", errorMessage); JsonObject errInfo = new JsonObject().put("result", "FAIL").put("msg", errorMessage).put("data", new JsonObject()); context.response() .setStatusCode(statusCode) .putHeader("content-type", "application/json; charset=utf-8") .end(errInfo.encodePrettily()); }
额外优化建议
你当前代码中if和else分支的赋值逻辑完全一致,可以直接删除判断语句,简化代码如下:
public void failureHandler(RoutingContext context) { int statusCode = context.statusCode(); String errorMessage = context.failure().getMessage(); log.error("fail: {}", errorMessage); JsonObject errInfo = new JsonObject().put("result", "FAIL").put("msg", errorMessage).put("data", new JsonObject()); context.response() .setStatusCode(statusCode) .putHeader("content-type", "application/json; charset=utf-8") .end(errInfo.encodePrettily()); }
注意:后续开发请不要引用任何Vert.x中
impl包下的内部类,这类代码不受版本兼容性承诺保护,很容易在版本升级时出现兼容问题。
内容的提问来源于stack exchange,提问作者user17085185
相关产品推荐
相关产品推荐

