【问题标题】:Play2 route dynamic part not as method parameterPlay2 路由动态部分不作为方法参数
【发布时间】:2019-02-17 21:05:59
【问题描述】:

一般我们用这种风格写带参数的路由

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

在某些情况下,我不需要方法Application.client()中的clientId,我希望我可以这样写条目

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

比如我想通过解析url得到clientId。

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

如何实现?

【问题讨论】:

    标签: routes playframework-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();
        }
    
    }
    

    【讨论】:

      【解决方案2】:

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

      这是您的Application.client(clientId) 操作的任务

      【讨论】:

        猜你喜欢
        • 2017-10-30
        • 2018-08-10
        • 1970-01-01
        • 1970-01-01
        • 2017-01-05
        • 2021-08-12
        • 1970-01-01
        • 1970-01-01
        • 2021-02-25
        相关资源
        最近更新 更多