Я изучаю структуру воспроизведения и понимаю, что я могу сопоставить запрос, например /manager/user
, как:
GET /manage/:user Controllers.Application.some(user:String)
Как мне сопоставить запрос типа /play/video?video_id=1sh1
?
Я изучаю структуру воспроизведения и понимаю, что я могу сопоставить запрос, например /manager/user
, как:
GET /manage/:user Controllers.Application.some(user:String)
Как мне сопоставить запрос типа /play/video?video_id=1sh1
?
У вас есть как минимум две возможности, позвоните им approach1
и approach2
.
0
является хорошим кандидатом, так как легче всего построить какое-то условие поверх него. Также он typesafe
и предварительно проверяет себя. Я бы рекомендовал это решение в начале.String
, поэтому вам нужно разобрать его на целое и дополнительно проверить, если требуется. routes
:
GET /approach1 controllers.Application.approach1(video_id: Int ?=0)
GET /approach2 controllers.Application.approach2
действия:
public static Result approach1(int video_id) {
if (video_id == 0) return badRequest("Wrong video ID");
return ok("1: Display video no. " + video_id);
}
public static Result approach2() {
int video_id = 0;
if (form().bindFromRequest().get("video_id") != null) {
try {
video_id = Integer.parseInt(form().bindFromRequest().get("video_id"));
} catch (Exception e) {
Logger.error("int not parsed...");
}
}
if (video_id == 0) return badRequest("Wrong video ID");
return ok("2: Display video no. " + video_id);
}
PS: LOL Я просто понял, что вы хотите использовать String identifier... в любом случае оба подхода будут похожи:)
Я бы сделал это просто, используя:
GET /play/video Controllers.Application.video(video_id:String)
А у контроллера у вас, конечно, есть что-то вроде:
public static Result video(String video_id) {
return ok("We got video id of: " + video_id);
}
В качестве альтернативы вам не нужно добавлять video_id:String
, так как игра по умолчанию обрабатывает параметры как String по умолчанию, поэтому она также работает так (по крайней мере, с новейшей игрой):
GET /play/video Controllers.Application.video(video_id)
Набрав localhost:9000/play/video?video_id=1sh1
в адресную строку, теперь вы должны дать представление, которое печатает:
Мы получили идентификатор видео: 1sh1
Чтобы добавить дополнительные параметры, выполните следующие действия:
GET /play/video controllers.Application.video(video_id:String, site:String, page:Integer)
Контроллер:
public static Result video(String video_id, String site, Integer page) {
return ok("We got video id of: " + video_id + " site: " + site + " page: " + page);
}
Набрав localhost:9000/play/video?video_id=1as1&site=www.google.com&page=3
в адресную строку, теперь вы должны дать представление, которое печатает:
Мы получили идентификатор видео: сайт 1as1: www.google.com страница: 3
Добро пожаловать ^^.
Я не совсем уверен, получил ли я то, что вы имели в виду, если бы вы имели в виду просто сопоставить url для работы в контроллере, ответ biesior идеально, но если вы хотите представить форму с методом get, например
@helper.form(action = routes.YourController.page1()) {
}
и имеющий параметр формы в URL-адресе в переписанном URL-формате, например
page1/foo/bar instead of page1?param1=foo¶m2=bar
Нет никакого способа сделать это, потому что эта спецификация http
Я часто обхожу это ограничение, получая параметры в первой функции в контроллере, а затем перенаправляю их на другой вид, как показано ниже.
public static Result page1(){
String param1 = Form.form().bindFromRequest().get("param1");
String param2= Form.form().bindFromRequest().get("param2");
return ( redirect( routes.YourController.page2(param1,param2)));
}
Затем получим что-то в странице2
public static Result page2(String param1,String param2){
...............
}
И это в файле маршрутов:
GET page2/:param1/:param2 controllers.YourControllers.page2(param1 : String, param2 : String )
Я надеюсь, что это поможет, но я не уверен, что наилучшая практика
Хорошо, поэтому я просто прочитал документацию и понимаю, что вам нужно
GET /play/video Controllers.Application.video()
И затем в контроллере вызовите getQueryString объекта HttpRequest
http://www.playframework.com/documentation/api/2.1.0/java/index.html