我想获取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");
}
答案 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
你可以:
简单配置:
// 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,blue
或color=red&color=blue
更详细,但您可以编写约束,测试并将所有内容留给路由器。 Pro是无效的查询永远不会进入您的控制器。
然后您只需在路线文件中使用它,如:
case class ColorParams(colors:List[MyColorEnum])
GET /foo/bar? controllers.Example.getBar(color:ColorParams)
示例网址:/foo/bar?color=red,blue
因为您自己正在解析字符串,所以此帖子中的任何字符串布局都可以根据需要使用此方法。查看有关QueryStringBindable的完整详情。我稍后会添加一个完整的例子。
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))