394

特殊文字の処理中@RequestParamとの違いは何ですか?@PathVariable

+@RequestParamスペースとして受け入れられました。

の場合@PathVariable+として認められました+

4

8 に答える 8

542

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

于 2012-12-05T07:47:16.083 に答える
124

リクエストからクエリ パラメータ値にアクセスするために使用される@RequestParamアノテーション。次のリクエスト URL を見てください。

http://localhost:8080/springmvc/hello/101?param1=10&param2=20

上記の URL リクエストでは、param1 と param2 の値に次のようにアクセスできます。

public String getDetails(
    @RequestParam(value="param1", required=true) String param1,
        @RequestParam(value="param2", required=false) String param2){
...
}

以下は、@RequestParam アノテーションでサポートされているパラメーターのリストです。

  • defaultValue – これは、リクエストに値がないか空の場合のフォールバック メカニズムとしてのデフォルト値です。
  • name – バインドするパラメーターの名前
  • required – パラメータが必須かどうか。true の場合、そのパラメーターの送信に失敗すると失敗します。
  • value – これは name 属性のエイリアスです

@パス変数

@ PathVariableは、着信要求の URI で使用されるパターンを識別します。以下のリクエスト URL を見てみましょう。

http://localhost:8080/springmvc/hello/101?param1=10¶m2=20

上記の 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

http://localhost:8080/spring_3_2/matrixvars/stocks;BT.A=276.70,+10.40,+3.91;AZN=236.00,+103.00,+3.29;SBRY=375.50,+7.60,+2.07

そして、そのための 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" >
于 2016-10-14T10:00:59.147 に答える
1

application/x-www-form-urlencoded midia タイプがスペースを+に変換し、レシーバーが+をスペースに変換してデータをデコードする可能性があります。詳細については、URL を確認してください。http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1

于 2014-09-26T02:13:00.997 に答える
0

@RequestParam:キーと値のペアのようなクエリ パラメータであると言えます @PathVariable:-URI から取得されます

于 2021-11-27T12:04:17.970 に答える