Play2路由动态部分不作为方法参数

时间:2014-09-10 23:02:11

标签: routes playframework-2.0

一般来说,我们用这种风格的参数写路线

GET  /clients/:clientId/info              Controllers.Application.client(clientId)

在某些情况下,我在方法Application.client()中不需要clientId,我希望我能以这种方式编写条目

GET /clients/:clientId/info               Controllers.Application.client()

例如,我想通过解析url来获取clientId。

换句话说,希望url pattern / clients / [^ /] + / info转到Application.client()方法。

如何实施?

2 个答案:

答案 0 :(得分:1)

我担心你不能省略路线参数的使用。路径解析器将阻止您跳过它们。

您必须提供一个接受参数的方法。

GET        /clients/:clientId/info        Controllers.Application.client(clientId)

如果你真的需要一个带无参数签名的方法,你所能做的就是从带参数的方法转发请求。

您没有写出您正在使用的语言。在Scala中,它看起来如下:

object Application extends Controller {

  def client(id: String): Action[AnyContent] = client()

  def client() = Action {
    Ok("")
  }

}

对于Java:

public class Application extends Controller {

    public static Result client(String id) {
        return client();
    }

    public static Result client() {
        return ok();
    }

}

答案 1 :(得分:0)

您不能使用两个不同的路由,使用相同的方法GET和路径/clients/:clientId/info - 这很明显 - 路由器应该如何猜测路径/clients/foo/info应该路由到/clients/bar/info以外的其他操作1}} ...

这是Application.client(clientId)行动

的任务