由于某些url版本控制,我们尝试将多个路径映射到同一个处理程序。
我试图通过重路由来实现这一点,但是查询参数在这个过程中丢失了。
// 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);
});解决这个问题最优雅的方法是什么?
虽然有一些关于谷歌集团的讨论,但令人惊讶的是,没有什么能快速而简单地实现。
发布于 2019-06-08 07:25:56
重路由文档说:
很明显,重路由在路径上工作,因此如果您需要保留和添加跨路由的状态,则应该使用RoutingContext对象。
因此,您可以创建一个全局捕获路由,该路由存储RoutingContext中的任何查询参数。
router.route().handler(ctx -> {
ctx.put("queryParams", ctx.queryParams());
ctx.next();
});然后,您的apiv3捕获所有路线:
router.route("/apiv3/*").handler( context -> {
String path = context.request().path();
path = path.replace("apiv3/", "");
LOG.info("Path changed to {}", path);
context.reroute(path);
});最后,一个实际的路由处理程序:
router.get("/products").handler(rc -> {
MultiMap queryParams = rc.get("queryParams");
// handle request
});https://stackoverflow.com/questions/56496881
复制相似问题