我想为我的 Vert.x Web 驱动的 API 创建一个 URL 结构,以清楚地说明某些实体是如何“包含”在其他实体中的,以及您如何“遍历实体路径”来查找子实体,所以我正在考虑使用像这样解决“孙子”的问题(我不希望有比孙子更深的东西):
GET /entity/:parent_id/sub-entity/:child_id/subsub-entity/:grandchild_id
所以通常我的Router
配置看起来像这样:
router.get("/entity/:parent_id/sub-entity/:child_id/subsub-entity/:grandchild_id")
.handler(r -> {
HttpServerRequest req = r.request();
Minipart p = Entities.get(req.getParameter("parent_id"))
.getPart(req.getParameter("child_id"))
.getMinipart(req.getParameter("grandchild_id"));
// do something with p
});
当我添加很多操作时(每个级别的每个实体类都有目录和创建操作,每个级别实体实例都有获取、更新和删除操作,以及其他一些花絮),我的路由器类变得非常大。
我正在考虑使用子路由器来卸载子实体管理,因此Entities
Router
配置可能会:
router.mountSubRouter("/entity/:parent_id/sub-entity", PartsRouter.init(vertx));
然后PartsRouter
可以做:
router.get("/:child_id").handler(r -> {
String parentEntityId = r.request().getParameter("parent_id");
Entity parent = Entities.get(parentEntityId);
String myid = r.request().getParameter("child_id");
Part myself = parent.getPart(myid);
// do something with myself
});
但是当我尝试这样做并尝试访问子路由器操作时,我从 Vert.x 收到 404 错误...
更新:
显然 Vert.x 明确不支持这一点 - 它引发了我的包装代码刚刚记录并忽略的异常,说:
java.lang.IllegalArgumentException: Can't use patterns in subrouter mounts
那么,是否有另一种方法来实现我想要做的事情(将大型路由器配置拆分为适当的类层次结构)?