Playframework 获取一个url参数的数组

Playframework 获取一个url参数的数组,playframework,routes,playframework-2.0,Playframework,Routes,Playframework 2.0,我想获取url参数ID,但它不会工作。这里有能帮我的人吗? 以下代码不起作用 网址: 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");

我想获取url参数ID,但它不会工作。这里有能帮我的人吗? 以下代码不起作用

网址:

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"); 

 }
公共静态结果findAlertsForIds(列表ID){
返回ok(“Coole Sache”);
}

尝试将ID作为字符串传递,如下所示
http://:9000/rest/alerts?ids=123456789

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


希望对您有所帮助。

这种参数绑定与查询字符串参数一起使用是现成的

您的路线必须按以下方式申报:

GET /restws/alerts controllers.AlertService.findAlertsForIds(ids: List[String])
您的URL应遵循以下模式:

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

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

  • /foo/bar?颜色=红色&颜色=蓝色
  • /foo/bar?颜色=红色,蓝色
  • /foo/bar?颜色=[红色,蓝色]
  • /foo/bar?颜色[]=红色、蓝色
您可以:

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()
示例URL:
/foo/bar?颜色[]=红色、蓝色
将成为
列表(“红色”、“蓝色”)

遗憾的是,这并没有那么健壮,因为许多API使用的格式是
color=red,blue
color=red&color=blue

2.创建自己的自定义查询字符串解析器 更详细,但您可以编写约束、测试,并将所有内容留给路由器。亲是,无效的查询永远不会到达您的控制器

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

case class ColorParams(colors:List[MyColorEnum])
GET/foo/bar?controllers.Example.getBar(颜色:ColorParams)

示例URL:
/foo/bar?颜色=红色,蓝色

因为您自己正在解析字符串,所以可以使用此方法在本文中根据需要使用任何字符串布局。有关详细信息,请参阅。稍后我将添加一个完整的示例

3.在Routes文件中定义阵列参数
GET/foo/bar?controllers.Example.getBar(颜色:Seq[String])

示例URL:
/foo/bar?颜色=红色&颜色=蓝色

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

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

玩2.5:

//http://localhost:9000/myview?option=qwer=5&option=pass&option=43,56&其他选项=5
类MyController扩展控制器{
def myview()=操作{隐式请求=>
println(request.queryString)
返回:

Map(选项->缓冲区(qwer=5,pass,43,56),otherOption->Buffer(5))
case class ColorParams(colors:List[MyColorEnum])
// inside Example.scala
def getBar( colors:Seq[String] ) = {
    ???
}