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

问题描述 投票:0回答:2

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

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()方法。

怎么实现呢?

routes playframework-2.0
2个回答
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();
    }

}

0
投票

你不能使用相同的方法GET和路径/clients/:clientId/info两个不同的路线 - 这是显而易见的 - 如何路由器应该猜测路径/clients/foo/info应该路由到其他行动而不是/clients/bar/info ???

这是你的Application.client(clientId)行动的任务

© www.soinside.com 2019 - 2024. All rights reserved.