1概要

このクイックチュートリアルでは、Springの

@ RequestParam

アノテーションについて説明します。

簡単に言うと、リクエストからクエリパラメータ、フォームパラメータ、さらにはファイルを抽出するために

@ RequestParam

を使用できます。


@ RequestParam

とその属性の使用方法について説明します。

@ RequestParam



@PathVariable.

の違いについても説明します。


2簡単なマッピング


id

というクエリパラメータを受け取るエンドポイント

/api/foos

があるとします。

@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam String id) {
    return "ID: " + id;
}

この例では、

@ RequestParam

を使用して

id

クエリパラメータを抽出しました。

単純なGETリクエストは

getFoos

を呼び出します。

http://localhost:8080/api/foos?id=abc

ID:abc

次に、アノテーションの属性を見てみましょう:__name、__ __value、
required__および__defaultValue .__ **

=== **  3要求パラメータ名の指定**

前の例では、変数名とパラメータ名は両方とも
同じ。

** 時には、これらを違うものにしたいと思うこともあります。
Spring Bootを使用している場合、特別なコンパイル時が必要になるかもしれません。
設定名やパラメータ名は実際にはバイトコードに含まれていません。

** しかし、いいのは__ @ RequestParam__の名前を以下のように設定できることです。
__name__属性:**
[source、java、gutter:、true]----

@PostMapping( "/api/foos")
@ResponseBody
public String addFoo(@RequestParam(name = "id")String fooId、@RequestParam String name){
    戻り値 "ID:" fooId "名前:"名前。
}


@ RequestParam(value =“ id”)

または単に実行することもできます。

@ RequestParam(“ id”).


4オプションのリクエストパラメータを作成する


@ RequestParam

のアノテーションが付けられたメソッドパラメータは、
デフォルト。

つまり、パラメータがリクエストに含まれていない場合は、次のようになります。
エラー:
[ソース、bash、ガター:、true]—-

GET/api/foos HTTP/1.1

400不正な要求
必須の文字列パラメータ 'id'が存在しません
----

ただし、__ @ RequestParam__をオプションに設定できます。
____必須____属性:
[source、java、gutter:、true]----

@GetMapping( "/api/foos")
@ResponseBody
public String getFoos(@RequestParam(必須= false)文字列ID){
    「ID:」IDを返します。
}
----

この場合、両方とも:
[ソース、bash、ガター:、true]----

http://localhost:8080/api/foos?id = abc
----
ID:abc
----

そして

[source,bash,gutter:,true]

----
http://localhost:8080/api/foos
----

ID:null
----

メソッドを正しく起動します。

** パラメータが指定されていない場合、methodパラメータは
__ヌル__。**

=== **  5リクエストパラメータのデフォルト値**

また、デフォルト値を__ @ RequestParam__に設定することもできます。
__defaultValue__属性:
[source、java、gutter:、true]----

@GetMapping( "/api/foos")
@ResponseBody
public String getFoos(@RequestParam(defaultValue = "test")文字列ID){
    「ID:」IDを返します。
}
----

** これは____required = falseのようなものです。
パラメータを指定します。**
[ソース、bash、ガター:、true]----

http://localhost:8080/api/foos
----
ID:テスト
----

とはいえ、それを提供しても構いません。

[source,bash,gutter:,true]

----
http://localhost:8080/api/foos?id=abc
----

ID:abc
----

____defaultValue ____attributeを設定すると、__required__は次のようになります。
確かに、falseに設定してください。

=== **  6。全パラメータのマッピング**

** 名前を定義せずに複数のパラメータを持つこともできます** または
__Map:__を使用するだけでカウント
[source、java、gutter:、true]----

@PostMapping( "/api/foos")
@ResponseBody
public String updateFoos(@RequestParam Map <String、String> allParams){
    return "パラメータは" allParams.entrySet();
}
----

これは送信されたパラメータを反映します。
[ソース、bash、ガター:、true]----

curl -X POST -F '名前= abc' -F 'id = 123' http://localhost:8080/api/foos

パラメータは{[name = abc]、[id = 123]}です。

=== **  7。多値パラメータのマッピング**

単一の__ @ RequestParam__は複数の値を持つことができます。
[source、java、gutter:、true]----

@GetMapping( "/api/foos")
@ResponseBody
public String getFoos(@RequestParam List <String> id){
    "ID are" idを返します。
}

  • そして、Spring MVCはカンマ区切りの

    __id

    __parameterをマップします。
    [ソース、bash、ガター:、true]—-

IDは[1,2,3]です

  • あるいは別々の

    id

    パラメータのリスト:**

http://localhost:8080/api/foos?id=1&id=2

IDは[1,2]です

=== **  8 __ @ RequestParam__と__ @ PathVariable__ **

__ @ RequestParam__と__ @ PathVariable__の両方を使用して値を抽出できます
リクエストURIからですが、それらは少し異なります。

==== **  8.1。クエリパラメータとURIパス**

____ @ RequestParam____sはクエリ文字列から値を抽出しますが、
__ @ PathVariables__はURIパスから値を抽出します。
[source、java、gutter:、true]----

@GetMapping( "/foos/{id}")
@ResponseBody
public String getFooById(@PathVariable String id){
    「ID:」IDを返します。
}

次に、パスに基づいてマッピングします。
[ソース、bash、ガター:、true]—-

ID:abc

そして__ @ RequestParamの場合、それは次のようになります。

@GetMapping("/foos")
@ResponseBody
public String getFooByIdUsingQueryParam(@RequestParam String id) {
    return "ID: " + id;
}

これは私たちに同じ応答を与えるでしょう、ただ異なるURI:

http://localhost:8080/foos?id=abc

ID:abc

==== **  8.2。エンコードされた値と正確な値**

__ @ PathVariable__はURIパスから値を抽出しているため、そうではありません。
エンコードされています。一方、__ @ RequestParam__はです。

前の例を使用すると、__ab c__はそのまま返されます。
[ソース、bash、ガター:、true]----

http://localhost:8080/foos/ab c

ID:ab c

** しかし@RequestParam__リクエストの場合、パラメータはURLデコードされます。

[source,bash,gutter:,true]

ID:ab c

** 8.3。オプション値


  • @ RequestParam



    @ PathVariable

    はどちらもオプションです。


required

属性を使用して、

@ PathVariable

をオプションにすることができます。
Spring 4.3.3以降:
[source、java、gutter:、true]—-

@GetMapping({“/myfoos/optional”、 “/myfoos/optional/{id}”})
@ResponseBody
public String getFooByOptionalId(@PathVariable(必須= false)文字列ID){
    「ID:」IDを返します。
}

それから、どちらかを実行できます。
[ソース、bash、ガター:、true]----

http://localhost:8080/myfoos/optional/abc

ID:abc

または

[source,bash,gutter:,true]

ID:null

@RequestParamでは、で見たように

required

属性を使用することもできます。
前のセクション


@ PathVariable

をオプションにするときは注意が必要です。
パスの衝突を避けます。


9結論

この記事では、

@ RequestParam

とその使い方を学びました。

@ RequestParam



@ PathVariable

の違い。

例の完全なソースコードは、にあります。

GitHub
プロジェクト