Playframework 2.0 播放框架2:在路由中使用数组[String]

Playframework 2.0 播放框架2:在路由中使用数组[String],playframework-2.0,Playframework 2.0,我想生成如下url: GET /photo controllers.Photos.list(tags: java.util.List[String]) /照片?标签=标签1、标签2、标签3 路由文件: GET /photo controllers.Photos.list(tags:Array[String] ?= "") 我在play console中发现以下错误: 找不到类型数组[String]的QueryString绑定器 实现这一目标的最佳方式是什么 谢谢。我认为您

我想生成如下url:

GET     /photo  controllers.Photos.list(tags: java.util.List[String])
/照片?标签=标签1、标签2、标签3

路由文件:

GET     /photo  controllers.Photos.list(tags:Array[String] ?= "")
我在play console中发现以下错误:

找不到类型数组[String]的QueryString绑定器

实现这一目标的最佳方式是什么


谢谢。

我认为您应该使用一个通用的
字符串
,然后注意将其转换为
控制器中的
数组

路线:

GET     /photo  controllers.Photos.list(tags:String ?= "")
在Java中:

public static Result list (String tags){
    String[] tagsArray = tags.split(",");
    // do something with tagsArray
    return ok();
}

当值在查询中时,play将绑定到数组的/列表 字符串或具有相同名称的post数据

这似乎也可行:

This route: http://localhost/controller/{id} 
此url:
http://localhost/controller/1?id=2&id=3

将绑定到
控制器(int[]id)
其中id->{1,2,3}

过帐id=2&id=3也将绑定到数组

参考:
使用列表而不是数组应该可以

如果您使用的是Java,它的工作原理如下:

GET     /photo  controllers.Photos.list(tags: java.util.List[String])

顺便说一句,如果您希望传递一组long,则以下操作有效:

GET/photo controllers.Photos.list(标记:java.util.list[java.lang.Long])


控制器函数将列表标签作为参数。

这是我的第一个想法。我将使用此解决方案。下面@Ahmed Aswani描述的方法是在HTTP中执行此操作的“正确”方法。在查询参数中执行数组的正确方法(无论框架如何)据我所知,实际上是这样的/photo?tags=tag1&tags=tag2&tags=tag3…有点冗长,但规范允许重复,我已经搜索了几个小时了!事实证明,您不能只使用List[String]。默认情况下,它将使用scala类型!将出现以下异常!类型失配;found:List[String](在scala.collection.immutable中)required:List[_](在java.util中)使用完整的包名是正确的方法