如何使用Play在GET请求中路由类似地图的参数

时间:2015-07-28 18:58:53

标签: playframework playframework-2.0

我必须在我的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

1 个答案:

答案 0 :(得分:1)

你的假设是正确的。默认的QueryString绑定器不支持映射,因此您应该实现自己的QueryStringBindableJavadoc of QueryStringBindable应该给你一个如何实现它的提示。

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

  • 字符串
  • 字符
  • 内部
  • 整数(Java)
  • Long(Scala和Java)
  • Double(Scala和Java)
  • Float(Scala和Java)
  • 布尔值(Scala和Java)
  • java.util.UUID中
  • 选项
  • 可选(Java)
  • SEQ
  • 列表(Scala和Java)
  • 阵列

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