子路由器不能挂载在一个准确的路径上
Sub router cannot be mounted on an exact path
我想在 vert.x 中做嵌套路由,我尝试了以下方法:
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());
}
}
}
}
当我开始编译应用程序时,出现错误消息:
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(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[=11=](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.run(SingleThreadEventExecutor.java:989)
at io.netty.util.internal.ThreadExecutorMap.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/*
作为 public 接口的根路径。
关于上面的错误,我哪里做错了?
您已经提出了解决方案。
要走的路:
r.route("/api/*")
.subRouter(GenderResource(vertx).create())
.subRouter(InterestsResource(vertx).create())
我想在 vert.x 中做嵌套路由,我尝试了以下方法:
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());
}
}
}
}
当我开始编译应用程序时,出现错误消息:
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(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[=11=](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.run(SingleThreadEventExecutor.java:989)
at io.netty.util.internal.ThreadExecutorMap.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/*
作为 public 接口的根路径。
关于上面的错误,我哪里做错了?
您已经提出了解决方案。
要走的路:
r.route("/api/*")
.subRouter(GenderResource(vertx).create())
.subRouter(InterestsResource(vertx).create())