Play framework 2: используйте Array [String] в маршруте

Я хочу создать такой URL-адрес:

/фото? Теги = tag1, tag2 tag3

файл маршрута:

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

Я получил эти ошибки в консоли воспроизведения:

Нет строкового связывания QueryString для типа Array [String]

Каков наилучший способ достичь этого?

Спасибо.

Ответ 1

Я думаю, что вы должны использовать общий String, а затем позаботиться о преобразовании его в Array в свой controller

маршруты:

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

в Java:

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

Ответ 2

play будет связываться с массивами/списками, когда значения находятся в запросе строковые или почтовые данные с тем же именем.

это также работает:

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

Этот URL: 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

Ответ 3

Использование списка вместо массива должно работать.

Если вы используете Java, он работает следующим образом:

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

Ответ 4

В стороне, если вы хотите передать массив Longs, это работает:

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

с функцией контроллера, принимающей List<Long> tags в качестве аргумента.