【问题标题】:Non-capturing wildcards in Play Framework routesPlay Framework 路由中的非捕获通配符
【发布时间】:2013-11-14 19:17:09
【问题描述】:

我正在通过 Play 公开一个 HTTP API,为了管理破坏兼容性的更改,URL 包含版本号。目前看起来如下:

GET   /api/v1/someMethod       com.foo.Api.someMethod()

当我对其中一种方法的输出进行更改时,我想支持 v2。不过,对于大多数方法,行为是相同的,所以我不在乎使用哪个版本。我试图将上面的行修改为:

GET   /api/v:version/someMethod       com.foo.Api.someMethod()

但 Play 编译失败,错误为 Missing parameter in call definition: version

知道我没有在调用中使用版本参数 - 因为我不需要!有没有一种明智的方法来实现我在这里所追求的,要么让 Play 跳过此检查,要么在未作为参数捕获的路由中放置通配符?

(我想如果不是,我可以将参数添加到方法定义中,然后忽略它。但如果可能的话,我宁愿避免这样做。)

【问题讨论】:

    标签: scala playframework-2.0


    【解决方案1】:

    玩了一段时间试图找到解决方法,我怀疑这可能是不可能的。

    最大的症结是反向路由。 Play 希望我能够在我的模板中使用@routes.com.foo.Api.someMethod,并将其解析为调用该方法的 URL。 (事实上​​,我在我的 API 文档中这样做了)。如果要接受我的上述任何一个建议,那么与该方法对应的实际 URL 是任意的。

    我想我真正想要的是该方法有一个规范的 URL,但其他类似的模式也被认为是匹配的。我接受 Play 不提供此作为相对简单的路由文件语法的一部分,我必须自己完成它(例如,通过使用两种模式,最终使用通配符但不直接调用相同的方法)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多