私はプレイフレームワークを学び、/manager/user
などのリクエストを次のようにマッピングできることを理解しています。
GET /manage/:user Controllers.Application.some(user:String)
/play/video?video_id=1sh1
のようなリクエストをどのようにマッピングしますか?
少なくとも2つの可能性があります。それらを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文字列識別子を使用したいことに気付きました...とにかく両方のアプローチは似ています:)
私は単にそれを使ってやります:
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);
}
あるいは、playはデフォルトでパラメータをStringとして扱うように見えるため、video_id:String
を追加する必要はありません。したがって、(少なくとも最新のplayでは)次のようにも機能します。
GET /play/video Controllers.Application.video(video_id)
アドレスバーにlocalhost:9000/play/video?video_id=1sh1
と入力すると、印刷されるビューが表示されます。
次のビデオIDを取得しました: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
と入力すると、印刷されるビューが表示されます。
次のビデオIDを取得しました: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){
...............
}
そしてこれをroutesファイルに入れます:
GET page2/:param1/:param2 controllers.YourControllers.page2(param1 : String, param2 : String )
私はそれが助けになることを願っていますが、それがベストプラクティスであるかどうかはわかりません
わかりましたので、私はちょうどドキュメントを読んで、私が理解していることはあなたがする必要があるということです
GET /play/video Controllers.Application.video()
そして、コントローラーでHttpRequestオブジェクトのgetQueryStringを呼び出します
http://www.playframework.com/documentation/api/2.1.0/Java/index.html