假设我们有一个PlayFramework应用程序,其中包含以下路径:
GET /a controllers.App.doA()
GET /b controllers.App.doB()
GET /c controllers.App.doC()
现在我们想提供一条额外的路线:
GET /multi controllers.App.doMulti(requests: Seq[String])
这基本上返回requests
中请求的网址的组合结果。类似的东西:
def doMulti(requests: Seq[String]) = Action {
Ok( Json.toJson(
requests.map {
url => ws.url(url).get().map {
response => response.body
}
}
))
}
如果请求通常类似于requests=Seq("/a", "/a", "/c", "/a")
,则调用上述路由。我想应该有一些内部路由的方法,而不必通过WS进行http调用。
像:
def doMulti(requests: Seq[String]) = Action {
Ok( Json.toJson(
requests.map {
url => INTERNALLY_ROUTE(url).map {
response => response.body
}
}
))
}
因此,INTERNALLY_ROUTE(url)
将是反向路由操作的反转,将URL映射到请求的结果。所以实际上只是路由。但我不知道如何使用播放框架来做到这一点。
我尝试将Router
注入我的控制器,但这会产生循环依赖。