我正在尝试将 Infoobjects 列表发送到我的控制器。我需要指定路由文件。我知道如何发送 int、string 和 long 作为参数,但是 List<> 呢?
我已经尝试过了,但它不起作用,我会收到一条错误消息,上面写着“未找到:键入 Infoobject ”。
GET /generateExcel controllers.Application.generateExcel(list:List[Infoobject])
谢谢!
我正在尝试将 Infoobjects 列表发送到我的控制器。我需要指定路由文件。我知道如何发送 int、string 和 long 作为参数,但是 List<> 呢?
我已经尝试过了,但它不起作用,我会收到一条错误消息,上面写着“未找到:键入 Infoobject ”。
GET /generateExcel controllers.Application.generateExcel(list:List[Infoobject])
谢谢!
首先,我认为您需要将对象的包放在列表的 [] 中:(
List[path.of.your.package.Infoobject]
您的路线中没有导入)。
无论如何,我认为您只能将字符串和数字放在 URL 中,以便将参数发送到您的控制器。
第一种解决方法:您可以创建一个QueryStringBindable
将您的对象 ( List[Infoobject]
) 绑定到字符串的方法,以便控制器将通过 URL 作为字符串发送的信息作为 List[Infoobject] 恢复。
第二种解决方法:您可以发送可以帮助您在控制器中重新创建列表的字符串(例如,如果您查询数据库,或者它是仅包含字符串属性的对象列表)
这是 QueryStringBindable 的 java 文档:http ://www.playframework.com/documentation/api/2.1.1/java/play/mvc/QueryStringBindable.html
路由不是传递复杂对象的最佳位置,而不是传递 a List
(正如其他在答案/评论中指出的那样),您最好发送一个逗号分隔的数据库中持久化对象的 id 列表。请记住,在许多地方你可以碰壁,即。查询长度的限制或其他东西。
如果您不能/不想将它们保存在数据库中,您也可以使用缓存 API将整个列表存储在请求之间的内存中,因此您可以在 url 中发送缓存条目的 ID 作为通用String
.