特殊文字の処理中@RequestParam
との違いは何ですか?@PathVariable
+
@RequestParam
スペースとして受け入れられました。
の場合@PathVariable
、+
として認められました+
。
特殊文字の処理中@RequestParam
との違いは何ですか?@PathVariable
+
@RequestParam
スペースとして受け入れられました。
の場合@PathVariable
、+
として認められました+
。
@PathVariable
URI から何らかのプレースホルダーを取得することです (Spring はそれを URI テンプレートと呼びます) — Spring Reference Chapter 16.3.2.2 URI Template Patternsを参照してください@RequestParam
URIからもパラメーターを取得することです。Springリファレンスの第16.3.3.3章@RequestParamを使用してリクエストパラメーターをメソッドパラメーターにバインドするを参照してくださいURLhttp://localhost:8080/MyApp/user/1234/invoices?date=12-05-2013
が 2013 年 12 月 5 日にユーザー 1234 の請求書を取得する場合、コントローラー メソッドは次のようになります。
@RequestMapping(value="/user/{userId}/invoices", method = RequestMethod.GET)
public List<Invoice> listUsersInvoices(
@PathVariable("userId") int user,
@RequestParam(value = "date", required = false) Date dateOrNull) {
...
}
また、リクエストパラメーターはオプションにすることができ、Spring 4.3.3 以降ではパス変数もオプションにすることができます。ただし、これにより URL パス階層が変更され、リクエスト マッピングの競合が発生する可能性があることに注意してください。たとえば、ID「invoices」を持つ/user/invoices
ユーザーまたはユーザーに関する詳細の請求書を提供しますか?null
リクエストからクエリ パラメータ値にアクセスするために使用される@RequestParamアノテーション。次のリクエスト URL を見てください。
http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
上記の URL リクエストでは、param1 と param2 の値に次のようにアクセスできます。
public String getDetails(
@RequestParam(value="param1", required=true) String param1,
@RequestParam(value="param2", required=false) String param2){
...
}
以下は、@RequestParam アノテーションでサポートされているパラメーターのリストです。
@パス変数
@ PathVariableは、着信要求の URI で使用されるパターンを識別します。以下のリクエスト URL を見てみましょう。
上記の URL リクエストは、Spring MVC で次のように記述できます。
@RequestMapping("/hello/{id}") public String getDetails(@PathVariable(value="id") String id,
@RequestParam(value="param1", required=true) String param1,
@RequestParam(value="param2", required=false) String param2){
.......
}
@ PathVariableアノテーションには、リクエスト URI テンプレートをバインドするための属性値が 1 つだけあります。単一のメソッド内で複数の @ PathVariableアノテーションを使用できます。ただし、同じパターンを持つメソッドは 1 つだけにしてください。
また、もう 1 つの興味深い注釈があります: @MatrixVariable
そして、そのための Controller メソッド
@RequestMapping(value = "/{stocks}", method = RequestMethod.GET)
public String showPortfolioValues(@MatrixVariable Map<String, List<String>> matrixVars, Model model) {
logger.info("Storing {} Values which are: {}", new Object[] { matrixVars.size(), matrixVars });
List<List<String>> outlist = map2List(matrixVars);
model.addAttribute("stocks", outlist);
return "stocks";
}
ただし、次を有効にする必要があります。
<mvc:annotation-driven enableMatrixVariables="true" >
application/x-www-form-urlencoded midia タイプがスペースを+に変換し、レシーバーが+をスペースに変換してデータをデコードする可能性があります。詳細については、URL を確認してください。http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
@RequestParam:キーと値のペアのようなクエリ パラメータであると言えます @PathVariable:-URI から取得されます