2012-07-02 57 views
11

我想產生這樣一個網址:播放框架2:使用數組[字符串]在路線

/照片標籤=標籤1,標籤2,標籤3

路線文件:

GET  /photo controllers.Photos.list(tags:Array[String] ?= "") 

我得到這個錯誤在場上控制檯:

無QueryString綁定找到類型爲Array [String]

實現此目的的最佳方法是什麼?

謝謝。

+0

正確的方式做查詢參數(無論框架)從我理解的實際上是這樣的/ photo?tags = tag1&tags = tag2&tags = tag3 ...這有點冗長,但規範允許像這樣的重複 –

回答

10

我認爲你應該使用一個共同的String再取大約在controller

途徑將其轉換爲Array護理:

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

在Java中:

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

這是我的第一個想法。我將使用這個解決方案。 – mcarrolle

+4

下面由@Ahmed Aswani描述的方式是在HTTP中執行此操作的「正確」方式。 – sven

16

戲將綁定到數組的/列表中的值在查詢 字符串或發佈具有相同名稱的數據。

這也似乎工作:

This route: http://localhost/controller/{id} 

這個網址:http://localhost/controller/1?id=2&id=3

會結合controller(int[] id)其中id - > {1,2,3}

發帖ID = 2 & ID = 3也會綁定到一個數組。

參考: https://groups.google.com/forum/?fromgroups#!topic/play-framework/c5kB6wmcF8Q

10

使用列表,而不是一個數組應該工作。

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

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

我已經搜索了幾個小時! 事實證明,你不能只使用List [String]。它會默認使用scala類型! 將出現以下異常! 類型不匹配; found:List [String](in scala.collection.immutable) 必需:List [_](在java.util中) 使用完整的包名是正確的方法 –

2

順便說一句,如果你想傳遞的long數組,這個工程:

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

與控制器功能以List<Long> tags作爲參數。