如何使用 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]=asdfsorts[name]=0 没有正确解析 (尝试了简单的 String 类型,Seq[String]Map[String,String] - 最后一个抛出关于缺少 QueryStringBinder 的异常)

如何使用 Play 路由将这些查询参数映射到方法参数?我需要创建自己的自定义 QueryStringBinder 吗?

你的假设是正确的。默认的 QueryString 活页夹不支持映射,因此您应该实现自己的 QueryStringBindableJavadoc of QueryStringBindable 应该会提示您如何实现它。

播放2.x支持以下查询字符串参数类型:

  • 字符串
  • 字符
  • 整数
  • 整数(Java)
  • 长(Scala 和 Java)
  • 双(Scala 和 Java)
  • 浮动(Scala 和 Java)
  • 布尔值(Scala 和 Java)
  • java.util.UUID
  • 选项
  • 可选(Java)
  • 顺序
  • 列表(Scala 和 Java)
  • 数组

有关所有支持的类型,请参阅 Binders.scala