2013-10-28 40 views
9

この種のパラメータは、@RequestMappingのSpringの注釈では、value = "/redirect/{id}"のままです。 {id}は何ですか?これはExpression Languageのようなものですか?私が見たもののSpring @RequestMapping

サンプルコード:

@RequestMapping(value = "/files/{id}", method = RequestMethod.GET) 
public void getFile(@PathVariable("id") 
String fileName, HttpServletResponse response) 
{ 
    try 
    { 
     // get your file as InputStream 
     InputStream is = new FileInputStream("/pathToFile/"+ fileName); 
     // copy it to response's OutputStream 
     IOUtils.copy(is, response.getOutputStream()); 
     response.flushBuffer(); 
    } 
    catch(IOException ex) 
    { 
     throw new RuntimeException("IOError writing file to output stream"); 
    } 

} 

私の質問は、マッピングで{id}あるものであると@PathVariable注釈とその使用方法との関係は何ですか?私はウェブからいくつかの情報を赤くしていますが、皆さんからはるかに明確な説明を聞くためには、もっと感謝しています。

+2

'finally'ブロックで' is'を閉じるといいでしょう – yegor256

答えて

14

@RequestMappingにある{foo}の値は、要求パラメータではなくURLパスから取得された値を意味するパス変数です。例えば

/files/foo.zipへのユーザーアクセス場合、{id}foo.zipにマッチします、あなたは注釈@PathVariable("id")を持つ変数にその値を格納するために春を告げます。

@RequestMapping注釈値のURL識別子に複数のパス変数を設定することができます。これらの値は、中括弧の中で使用したのと同じIDの@PathVariableを使用して変数に挿入できます。

+0

'/ file/x = y'は' x'を保存しますか? – user2785929

+1

いいえ、 'x = y'を使いたい場合は'/file /?x = y'のように渡し、 'y'を正しく保持する' @RequestParam( "x")String x'を使う必要があります。 – Alex

0

あなたの例では、../files/1または../files/2または../files/3を参照すると、数字は異なるファイル名を表します。 @ PathVariable( "id")は、1つの目的で異なるパラメータ関数を書き込む時間を節約するのに役立ちます。

0

{id}は、私たちが今までに渡してきたURLクエリ文字列であり、@PathVariable( "id")でそのIDを取得し、メソッドの引数として渡します。ここにid。おかげさまで

0
@RequestMapping(value = "/files/{id}", method = RequestMethod.GET) 
public void getFile(@PathVariable("id") **String id**) 
String fileName, HttpServletResponse response) 
{ 
    //your code here 
} 

pathvariableは、uriをmethodパラメータでマップします。ここではあなたの要求に応じてIDを送信します。 /ファイル/ 7。

関連する問題