如何使用 Play 在 GET 请求中路由类似地图的参数
How to route map-like parameters in GET request with Play
我必须在我的 Play 应用程序中处理以下 GET 请求,例如
http://host/somemethod?queries[search]=asdf&perPage=100&sorts[name]=0
现在,通常 GET 请求如下:
http://host/somemethod?queries=asdf&perPage=100&sorts=0
可以很容易地处理,例如
GET /somemethod controllers.SomeMethodController.getPeople(queries:String ?= "", perPage: Int ?= 10, sorts:String ?= "")
但参数如:queries[search]=asdf
或 sorts[name]=0
没有正确解析
(尝试了简单的 String
类型,Seq[String]
或 Map[String,String]
- 最后一个抛出关于缺少 QueryStringBinder
的异常)
如何使用 Play 路由将这些查询参数映射到方法参数?我需要创建自己的自定义 QueryStringBinder
吗?
你的假设是正确的。默认的 QueryString 活页夹不支持映射,因此您应该实现自己的 QueryStringBindable
。 Javadoc of QueryStringBindable 应该会提示您如何实现它。
播放2.x支持以下查询字符串参数类型:
- 字符串
- 字符
- 整数
- 整数(Java)
- 长(Scala 和 Java)
- 双(Scala 和 Java)
- 浮动(Scala 和 Java)
- 布尔值(Scala 和 Java)
- java.util.UUID
- 选项
- 可选(Java)
- 顺序
- 列表(Scala 和 Java)
- 数组
有关所有支持的类型,请参阅 Binders.scala。
我必须在我的 Play 应用程序中处理以下 GET 请求,例如
http://host/somemethod?queries[search]=asdf&perPage=100&sorts[name]=0
现在,通常 GET 请求如下:
http://host/somemethod?queries=asdf&perPage=100&sorts=0
可以很容易地处理,例如
GET /somemethod controllers.SomeMethodController.getPeople(queries:String ?= "", perPage: Int ?= 10, sorts:String ?= "")
但参数如:queries[search]=asdf
或 sorts[name]=0
没有正确解析
(尝试了简单的 String
类型,Seq[String]
或 Map[String,String]
- 最后一个抛出关于缺少 QueryStringBinder
的异常)
如何使用 Play 路由将这些查询参数映射到方法参数?我需要创建自己的自定义 QueryStringBinder
吗?
你的假设是正确的。默认的 QueryString 活页夹不支持映射,因此您应该实现自己的 QueryStringBindable
。 Javadoc of QueryStringBindable 应该会提示您如何实现它。
播放2.x支持以下查询字符串参数类型:
- 字符串
- 字符
- 整数
- 整数(Java)
- 长(Scala 和 Java)
- 双(Scala 和 Java)
- 浮动(Scala 和 Java)
- 布尔值(Scala 和 Java)
- java.util.UUID
- 选项
- 可选(Java)
- 顺序
- 列表(Scala 和 Java)
- 数组
有关所有支持的类型,请参阅 Binders.scala。