Spring MVC @PathVariable


125

@PathVariableSpring MVC で使用する際の簡単な説明とサンプルを教えてもらえますか?URLの入力方法を含めてください。
jspページを表示するための正しいURLを取得するのに苦労しています。ありがとう。


1
Spring MVCコントローラーを介してjspを表示するには、viewまたはsayを使用しModelAndViewます。@PathVariableコントローラー名の変数名とその値を取得するために使用される注釈。例www.abcd.com/api/value=34455&anotherValue=skjdfjhks here valueanotherValueは変数であり、@ PathVariable( "value")int値と@PathVariable( "anotherValue")String anotherValue
agpt

回答:


221

注文を取得するためのURLを記述したいとします。

www.mydomain.com/order/123

ここで、123はorderIdです。

したがって、Spring MVCコントローラーで使用するURLは次のようになります

/order/{orderId}

注文IDをパス変数として宣言できるようになりました

@RequestMapping(value = " /order/{orderId}", method=RequestMethod.GET)
public String getOrder(@PathVariable String orderId){
//fetch order
}

URL www.mydomain.com/order/123を使用する場合、orderId変数には、スプリングにより値123が入力されます

また、pathVariableはURLの一部であるため、PathVariableはrequestParamとは異なります。リクエストパラメータを使用した同じURLは次のようになります www.mydomain.com/order?orderId=123

API DOC
Spring公式リファレンス


pathVariableを使用する場合。何かをインポートする必要がありますか?または依存関係?ありがとう。
ジェームズ2013年

PathVariableアノテーションをインポートする必要があるだけです。import org.springframework.web.bind.annotation.PathVariable
coder

ええ、いくつかの詳細、あなたがやろうとしていること、そして何が問題なのかを提供してください
コーダー


www.mydomain.com/order/abc.defを使用したいのですが、コントローラーでabcのみを取得しています
prem30488

10

以下のコードスニペットをご覧ください。

@RequestMapping(value="/Add/{type}")
public ModelAndView addForm(@PathVariable String type ){
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.setViewName("addContent");
    modelAndView.addObject("typelist",contentPropertyDAO.getType() );
    modelAndView.addObject("property",contentPropertyDAO.get(type,0) );
    return modelAndView;
}

コードの作成に役立つことを願っています。


私はモデルとビューに精通していません。へへ。おかげで..私のプロジェクトでこれを実装するのを楽しみにしています。しかし、私は最初にそれを完了する必要があります。:)
ジェームズ2013年

パスに関連付けるには、@ PathVariable( "type")を記述する必要があると思います。
FelixM 2014

1
www.mydomain.com/order/abc.defを使用したいのですが、コントローラーでabcのみを取得しています
prem30488

1
正規表現[a-zA-z0-9。]を使用しました
prem30488 2014年

8

パス変数を含むURLがある場合、例www.myexampl.com/item/12/updateここで、12はIDで、createは、更新を実行する単一のフォームを使用して、たとえば実行を指定するために使用する変数です。作成し、コントローラーでこれを行います。

   @PostMapping(value = "/item/{id}/{method}")
    public String getForm(@PathVariable("id") String itemId ,  
        @PathVariable("method") String methodCall , Model model){

     if(methodCall.equals("create")){
            //logic
      }
     if(methodCall.equals("update")){
            //logic
      }

      return "path to your form";
    }

このメカニズムにより、パス変数が特定の変数に関連付けられます。
ochiWlad 2016

2

@PathVariable URLから値をフェッチするために使用されます

例:質問をするには

www.stackoverflow.com/questions/19803731

ここでいくつかの質問idはURLのパラメータとして渡されます

この値をフェッチcontrollerするには、@ PathVariableをメソッドパラメータに渡すだけです。

@RequestMapping(value = " /questions/{questionId}", method=RequestMethod.GET)
    public String getQuestion(@PathVariable String questionId){
    //return question details
}

このフォームはどのように見えますか?入力値の1つを使用して{ISBN}値を指定できますか?はいの場合、フォームパラメータth:actionの完全なURLを作成するにはどうすればよいですか?
JanHorčička

1

メソッドパラメータをURIテンプレート変数にバインドする必要があることを示すアノテーション。RequestMappingアノテーション付きハンドラーメソッドでサポートされます。

@RequestMapping(value = "/download/{documentId}", method = RequestMethod.GET)
public ModelAndView download(@PathVariable int documentId) {
    ModelAndView mav = new ModelAndView();
    Document document =  documentService.fileDownload(documentId);

    mav.addObject("downloadDocument", document);
    mav.setViewName("download");

    return mav;
}

0

www.example.com/test/111のようなURLをヒットしたとしましょう。ここで、値111(動的)をコントローラーメソッドに取得する必要があります。このとき、次のように@PathVariableを使用します。

@RequestMapping(value = " /test/{testvalue}", method=RequestMethod.GET)
public void test(@PathVariable String testvalue){
//you can use test value here
}

SO変数値はURLから取得されます


0

これは、動的URIをマップ/処理するために使用されるアノテーションの1つです。URI動的パラメーターの正規表現を指定して、特定のタイプの入力のみを受け入れることもできます。

たとえば、一意の番号を使用して本を取得するためのURLは次のようになります。

URL:http://localhost:8080/book/9783827319333

URLの最後に示される番号は、次のように@PathVariableを使用してフェッチできます。

@RequestMapping(value="/book/{ISBN}", method= RequestMethod.GET)

public String showBookDetails(@PathVariable("ISBN") String id,

Model model){

model.addAttribute("ISBN", id);

return "bookDetails";

}

つまり、SpringでHTTPリクエストからデータを抽出することでした。


このフォームはどのように見えますか?入力値の1つを使用して{ISBN}値を指定できますか?はいの場合、フォームパラメータth:actionの完全なURLを作成するにはどうすればよいですか?
JanHorčička

-1

以下のコードスニペットをご覧ください。

@RequestMapping(value = "edit.htm", method = RequestMethod.GET) 
    public ModelAndView edit(@RequestParam("id") String id) throws Exception {
        ModelMap modelMap = new ModelMap();
        modelMap.addAttribute("user", userinfoDao.findById(id));
        return new ModelAndView("edit", modelMap);      
    }

プロジェクト全体がどのように機能するかを確認したい場合は、以下のリンクからダウンロードしてください:-

GitLabのUserInfoプロジェクト

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.