获取一个url param的数组

时间:2013-06-18 08:42:49

标签: playframework routes playframework-2.0

我想获取url-param ID,但它不起作用。大家能帮助我吗? 以下代码不起作用。

地址:

http://localhost:9000/rest/alerts?ids[]=123?ids[]=456

Routes.conf

GET /restws/alerts{ids} controllers.AlertService.findAlertsForIds(ids: List[String])

AlertService.java

public static Result findAlertsForIds(List<String> ids){

 return ok("Coole Sache"); 

 }

4 个答案:

答案 0 :(得分:30)

这种参数绑定与查询字符串参数一起开箱即用。

你的路线必须这样声明:

GET /restws/alerts controllers.AlertService.findAlertsForIds(ids: List[String])

您的网址应遵循以下模式:

http://localhost:9000/rest/alerts?ids=123&ids=456

答案 1 :(得分:2)

简而言之,你有很多选择......彼此有点不同。可以使用以下URL格式:

  • /foo/bar?color=red&color=blue
  • /foo/bar?color=red,blue
  • /foo/bar?color=[red,blue]
  • /foo/bar?color[]=red,blue

你可以:

1。使用播放表格

简单配置:

// form definition
case class ColorParams(colors:Seq[String])

val myForm = Form(formMapping(
  "color" -> seq(text(1, 32)))(ColorParams.apply)(ColorParams.unapply)

// in your controller method call
val params = myForm.bindFromRequest()

示例网址:/foo/bar?color[]=red,blue将成为List("red","blue")

可悲的是,这并不是很强大,因为许多API都使用格式color=red,bluecolor=red&color=blue

2。创建自己的自定义查询字符串解析器

更详细,但您可以编写约束,测试并将所有内容留给路由器。 Pro是无效的查询永远不会进入您的控制器。

然后您只需在路线文件中使用它,如:

case class ColorParams(colors:List[MyColorEnum])

GET /foo/bar? controllers.Example.getBar(color:ColorParams)

示例网址:/foo/bar?color=red,blue

因为您自己正在解析字符串,所以此帖子中的任何字符串布局都可以根据需要使用此方法。查看有关QueryStringBindable的完整详情。我稍后会添加一个完整的例子。

3。在Routes文件中定义数组参数

GET /foo/bar? controllers.Example.getBar(color:Seq[String])

// inside Example.scala
def getBar( colors:Seq[String] ) = {
    ???
}

示例网址:/foo/bar?color=red&color=blue

注意:我在路由文件中使用了color,这是URL中的名称,但colors方法中的getBar是为了清晰起见。这些名称不必匹配,只需要匹配类型。

陷阱

注意这可能很棘手,因为/foo/bar?color=red,blue变成了Seq('red,blue'),这是一个字符串的Seq,不是两个字符串,但它仍会显示在调试器为Seq(red,blue)。在调试器中看到的正确值是Seq(red, blue),注意那个空格?棘手。

答案 2 :(得分:1)

尝试将id作为字符串传递 http://<hostname>:9000/rest/alerts?ids=123,456,789

然后通过在字符串上应用split()函数来获取数组。

希望它有所帮助。

答案 3 :(得分:0)

播放2.5:

// http://localhost:9000/myview?option=qwer=5&option=pass&option=43,56&otherOption=5

class MyController extends Controller  {
  def myview() = Action { implicit request =>
    println(request.queryString)

返回:

Map(option -> Buffer(qwer=5, pass, 43,56), otherOption -> Buffer(5))