假设我的routes
文件中有这样的文件:
GET /api/jobs/:hash controllers.Jobs.read(hash)
现在,我了解如果发出此类请求,Play可以将其路由到controllers.Jobs.read
并插入正确的hash
参数以触发Action
并返回Result
}。此外,我知道我可以路由routes.Jobs.read.url(hash)
来生成路径,让我回到字符串/api/jobs/${hash}
(这很好,我一直使用它。)
但我有一个不同的用例(来自上面的那些),我想知道Play是否也可以帮助我。我想做的事情(Play必须在内部做某事)是采取一个给定的路径,例如/api/jobs/12345
然后将其传递给一个函数,该函数只会向我返回一个表示哈希参数的Option[String]
(假设它是一个有效路径),但不会调用该行为。< / p>
我希望某个地方有一个自动生成的函数,如routeparsers.Jobs.read(url: String): Option[String]
,或者更普遍的routeparser.Jobs.read(url: String): Map[String,String]
。我查看了一些生成的代码,但是我没有看到任何这样的实用函数(至少不是我认识的函数)。
为了说清楚,这里的问题是超媒体API,其中API的用户将向我传递请求,其中正文(在我的情况下为JSON)通过其URL引用资源。我需要能够将这些URL转换为对实际服务器端资源的引用,为此,我需要首先确认它们是引用预期类型资源的正确格式(即它们符合模式)然后提取我可以用来识别服务器端资源的关键参数。所以关键是我没有使用这些URL来触发Action
,我只是使用它们来尝试识别服务器端资源。出于显而易见的原因,我感兴趣的URL模式将与我的routes
文件中的GET请求相关联。
我希望a)因为这对于超媒体API来说是非常必要的功能,并且b)在路由期间,Play必须完成所有这些操作,以便有一种相当直接的方式来访问此功能。 / p>
答案 0 :(得分:0)
这个答案可能有点晚了,但我只是偶然发现了你的问题。
与搜索内容最接近的是路由器API本身,您可以通过Application.router
访问它(这是自2.2以来的记录,但它也可以在2.1中使用)。
Router
对象有一个handlerFor
方法,应该是您想要的方法(尽管方式略低)。