子路由器无法安装在正确的路径上 [英] Sub router cannot be mounted on an exact path
本文介绍了子路由器无法安装在正确的路径上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想在vert.x中进行嵌套路由,并且尝试了以下方法:
I would like to do nested routes in vert.x and I have tried the following:
class MainVerticle : AbstractVerticle() {
private fun apiResource(r: Router): Unit {
r.route("/api")
.subRouter(GenderResource(vertx).create())
}
private fun rootResource(r: Router): Unit {
r.route("/").handler {
val res = it.response()
res.putHeader("content-type", "text/plain");
// Write to the response and end it
res.end("I am healthy");
}
}
override fun start(startPromise: Promise<Void>) {
val server = vertx.createHttpServer()
val router = Router.router(vertx)
apiResource(router)
rootResource(router)
server.requestHandler(router).listen(8888) { http ->
if (http.succeeded()) {
startPromise.complete()
println("HTTP server started on port 8888")
} else {
startPromise.fail(http.cause());
}
}
}
}
当我开始编译应用程序时,我收到了错误消息:
when I start to compile the app, I've got error messsage:
java.lang.IllegalStateException: Sub router cannot be mounted on an exact path.
at io.vertx.ext.web.impl.RouteImpl.subRouter(RouteImpl.java:153)
at io.databaker.MainVerticle.apiResource(MainVerticle.kt:13)
at io.databaker.MainVerticle.start(MainVerticle.kt:31)
at io.vertx.core.impl.DeploymentManager.lambda$doDeploy$5(DeploymentManager.java:196)
at io.vertx.core.impl.AbstractContext.dispatch(AbstractContext.java:96)
at io.vertx.core.impl.AbstractContext.dispatch(AbstractContext.java:59)
at io.vertx.core.impl.EventLoopContext.lambda$runOnContext$0(EventLoopContext.java:40)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:834)
导致错误的代码是:
r.route("/api")
.subRouter(GenderResource(vertx).create())
GenderResource
的定义如下:
class GenderResource(private val vertx: Vertx) {
private val router = Router.router(vertx)
init {
readAll()
}
private fun readAll(): Unit {
val router = Router.router(vertx)
router
.get("/genders")
.handler {
val res = it.response()
res.putHeader("content-type", "text/plain");
// Write to the response and end it
res.end("I am genders path");
}
}
fun create(): Router {
return router
}
}
我正在尝试创建/api/genders
路径,将来我还将创建/api/interests
.因此,将/api/*
作为公共接口的根路径.
I am trying to create a /api/genders
path and in the future I will also create /api/interests
. So making /api/*
as root path for public interfaces.
关于上述错误,我在做什么错了?
Regarding to error above, What am I doing wrong?
推荐答案
您已经提出了解决方案.
You already suggested a solution for that.
要走的路:
r.route("/api/*")
.subRouter(GenderResource(vertx).create())
.subRouter(InterestsResource(vertx).create())
这篇关于子路由器无法安装在正确的路径上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文