8

我想获取 url-param id,但它不起作用。这里有可以帮助我的人吗?以下代码不起作用。

网址:

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

路由配置文件

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

警报服务.java

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

 return ok("Coole Sache"); 

 }
4

4 回答 4

32

这种参数绑定可以与查询字符串参数一起使用。

您的路线必须像这样声明:

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

您的 URL 应遵循以下模式:

http://localhost:9000/rest/alerts?ids=123&ids=456
于 2013-06-18T14:07:27.853 回答
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()

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

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

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

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

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

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在Routes文件中使用了,这是URL中的名称,但colorsgetBar方法中。这些名称不必匹配,只需匹配类型即可。

陷阱

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

于 2016-05-13T16:24:09.490 回答
1

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

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

希望能帮助到你。

于 2013-06-18T08:51:14.637 回答
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))
于 2016-08-27T22:33:56.787 回答