27

私はプレイ フレームワークを学習しており、次のようなリクエストをマッピングできることを理解して/manager/userいます。

  GET      /manage/:user    Controllers.Application.some(user:String)

のようなリクエストをどのようにマッピングし/play/video?video_id=1sh1ますか?

4

4 に答える 4

26

少なくとも 2 つの可能性があります。それらapproach1を と と呼びましょうapproach2

  1. 最初のアプローチでは、ルート パラメータをデフォルト値で宣言できます。0その上に何らかの条件を構築するのが最も簡単なので、良い候補です。またtypesafe、 であり、それ自体を事前検証します。最初はこのソリューションをお勧めします。
  2. 2 番目のアプローチでは、パラメーターをリクエストから直接読み取るため、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識別子を使用したいことに気付きました...とにかく、両方のアプローチは似ています:)

于 2013-03-28T18:28:54.783 に答える
4

URLをコントローラーで機能するようにマップするだけの場合、あなたが意図したことを理解しているかどうかはよくわかりませんが、biesiorの答えは完璧ですが、次のようなgetメソッドでフォームを送信することを意味する場合

@helper.form(action = routes.YourController.page1()) {

 }

次のようなURL書き換え形式のURLにフォームのパラメーターを含める

page1/foo/bar instead of page1?param1=foo&param2=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 )

役に立てば幸いですが、それがベストプラクティスかどうかはわかりません

于 2013-12-27T00:08:40.120 に答える
3

わかりましたので、ドキュメントを読んだだけです。私が理解しているのは、あなたがする必要があるということです

GET /play/video         Controllers.Application.video()

そして、コントローラで HttpRequest オブジェクトの getQueryString を呼び出します

http://www.playframework.com/documentation/api/2.1.0/java/index.html

于 2013-02-12T23:12:48.523 に答える