【发布时间】:2014-02-03 03:58:10
【问题描述】:
我有一堆具有相同前缀的路由:
# with prefixes
GET /api/v1.0/action1 controllers.Api.action1
GET /api/v1.0/action2 controllers.Api.action2
GET /api/v1.0/action3 controllers.Api.action3
GET /api/v1.0/action4 controllers.Api.action4
# normal urls
GET /action1 controllers.Home.action1
GET /action2 controllers.Home.action2
我想摆脱/api/v1.0/ 的重复。 url 必须保持不变,我只是不想为 route 文件中的每个 url 手动编写它们。在 Rails 中是可能的。有什么办法吗?
【问题讨论】:
-
如果你有这样简单的例子,试试:
GET /api/v1.0/:action controllers.Api.action(action:String)并在控制器中调度:def action(action:String) = Action { def method:java.lang.reflection.Method = getMethodFromNameOrMap(action); method.invoke()} -
@ajozwik,由于反射会很慢
-
如果您使用缓存映射(将操作名称映射到方法) - 它将比正常调用慢两倍。但成本随着 JVM 的每个实现而降低。
-
很抱歉没有给你一个完整的答案,但是你看过詹姆斯罗珀的blog post on advanced routing。基本上你可以在 Scala 中编写路由,这意味着你拥有编程语言的全部功能以避免重复自己。
标签: scala playframework routing playframework-2.2