首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vertx如何使用查询参数重路由

vertx如何使用查询参数重路由
EN

Stack Overflow用户
提问于 2019-06-07 15:04:37
回答 1查看 1.5K关注 0票数 1

由于某些url版本控制,我们尝试将多个路径映射到同一个处理程序。

我试图通过重路由来实现这一点,但是查询参数在这个过程中丢失了。

代码语言:javascript
复制
// reroute if the path contains apiv3 / api v3
        router.route("/apiv3/*").handler( context -> {
            String path = context.request().path();
            path = path.replace("apiv3/", "");
            LOG.info("Path changed to {}", path);
            context.reroute(path);
        });

解决这个问题最优雅的方法是什么?

虽然有一些关于谷歌集团的讨论,但令人惊讶的是,没有什么能快速而简单地实现。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-08 07:25:56

重路由文档说:

很明显,重路由在路径上工作,因此如果您需要保留和添加跨路由的状态,则应该使用RoutingContext对象。

因此,您可以创建一个全局捕获路由,该路由存储RoutingContext中的任何查询参数。

代码语言:javascript
复制
router.route().handler(ctx -> {
        ctx.put("queryParams", ctx.queryParams());
        ctx.next();
    });

然后,您的apiv3捕获所有路线:

代码语言:javascript
复制
router.route("/apiv3/*").handler( context -> {
  String path = context.request().path();
  path = path.replace("apiv3/", "");
  LOG.info("Path changed to {}", path);
  context.reroute(path);
});

最后,一个实际的路由处理程序:

代码语言:javascript
复制
router.get("/products").handler(rc -> {
  MultiMap queryParams = rc.get("queryParams");
  // handle request
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56496881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档