【问题标题】:Vertx-web route distinction between the path uri and path paramVertx-web 路由路径 uri 和路径参数的区别
【发布时间】:2018-04-14 07:40:35
【问题描述】:

我有两条 2 路线如下:

1) /company/:companyId/brand/:brandId/order/:orderId

2) /company/:companyId/brand/:brandId/order/getOrders?count=10

当我尝试调用第二条路由时,会调用第一条路由。此外,如果第一个路由不存在,那么第二个路由将被成功调用。 我不确定第一个路由是如何被调用的,即使它没有“getOrders”路径 URI。在匹配路径 URI 时如何选择它?

【问题讨论】:

    标签: routes vert.x


    【解决方案1】:

    你定义路线的顺序很重要,把最具体的路线放在第一位,在你的情况下是第二个。

    router.get("/company/:companyId/brand/:brandId/order/getOrders?count=10").handler(ctx -> ...)
    router.get("/company/:companyId/brand/:brandId/order/:orderId").handler(ctx -> ...)
    

    其他选项,如果您的“上层”上下文处理程序之一发现它不负责处理请求(例如您的第一个不负责响应第二个的请求),您可以致电 next()上下文和返回

    router.get("/company/:companyId/brand/:brandId/order/:orderId")
          .handler(ctx -> {
             if(shouldHandleRequest(ctx)) {
               //respond
               ctx...end();
             } else {
               ctx.next(); //skip to next handler
             });
    router.get("/company/:companyId/brand/:brandId/order/getOrders?count=10")
          .handler(ctx -> ...)
    

    【讨论】:

    • 感谢 Gerald Mücke!更改声明顺序的工作原理是 vertx 按照声明路由的顺序分配默认优先级。虽然类似的东西在 Jax-rs 中有效,但声明的顺序并不重要,所以只要想想在 vertx-web 中是否也应该存在类似的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多