play框架中查询字符串和路径参数之间的区别?

时间:2017-03-23 15:49:41

标签: scala playframework

我自己学习游戏框架。 路由器中的查询字符串和路径参数有什么区别?以及PathBindableQueryStringBindable之间的区别是什么?

1 个答案:

答案 0 :(得分:0)

它在文档中描述:

https://www.playframework.com/documentation/2.5.x/ScalaRouting https://www.playframework.com/documentation/2.5.x/ScalaRequestBinders

简而言之,path参数是URL中的参数:

# Client, like /clients/125
GET   /clients/:id          controllers.Clients.show(id: Long)

查询字符串参数是查询字符串参数:

# Pagination links, like /clients?page=3
GET   /clients              controllers.Clients.list(page: Int ?= 1)

您可以看到,在此示例中,Play将参数从字符串绑定到其他类型,例如LongInt。在某些情况下,您希望将参数绑定到其他类型,然后您需要编写自己的绑定器。路径参数为PathBindable,查询参数为QueryStringBindable

因此,如果您可以将客户端ID绑定到客户端,则可以编写

# Client, like /clients/125
GET   /clients/:id          controllers.Clients.show(client: Client)

和活页夹:

implicit def pathBinder(implicit intBinder: PathBindable[Int]) = new PathBindable[Client] {
  override def bind(key: String, value: String): Either[String, Client] = {
    for {
      id <- intBinder.bind(key, value).right
      client <- Client.findById(id).toRight("Client not found").right
    } yield client
  }
  override def unbind(key: String, client: Client): String = {
    client.id.toString
  }
}

如果您想完全控制URL解析和绑定,您可以更进一步使用String Interpolating Routing DSL