[email protected]アノテーション
1. 概要
このクイックチュートリアルでは、Springの@RequestParamアノテーションとその属性について説明します。
簡単に言うと、 @RequestParam を使用して、リクエストからクエリパラメータ、フォームパラメータ、さらにはファイルを抽出できます。
2. 簡単なマッピング
idというクエリパラメータを受け取るエンドポイント/api /foosがあるとします。
@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam String id) {
return "ID: " + id;
}
この例では、@RequestParamを使用してidクエリパラメーターを抽出しました。
単純なGETリクエストは、getFoosを呼び出します。
http://localhost:8080/spring-mvc-basics/api/foos?id=abc
----
ID: abc
次に、アノテーションの属性(名前、値、必須、デフォルト値)を見てみましょう。
3. リクエストパラメータ名の指定
前の例では、変数名とパラメーター名の両方が同じです。
ただし、これらを異なるものにしたい場合もあります。または、Spring Bootを使用していない場合は、特別なコンパイル時の構成を行う必要があります。そうしないと、パラメーター名が実際にはバイトコードに含まれません。 。
幸い、name属性を使用して@RequestParam名を構成できます。
@PostMapping("/api/foos")
@ResponseBody
public String addFoo(@RequestParam(name = "id") String fooId, @RequestParam String name) {
return "ID: " + fooId + " Name: " + name;
}
@RequestParam(value =“ id”)または @RequestParam(“ id”)。を実行することもできます。
4. オプションのリクエストパラメータ
デフォルトでは、@RequestParamで注釈が付けられたメソッドパラメーターが必要です。
これは、パラメータがリクエストに存在しない場合、エラーが発生することを意味します。
GET /api/foos HTTP/1.1
-----
400 Bad Request
Required String parameter 'id' is not present
@RequestParam をオプションとして構成できますが、必須の属性を使用します。
@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam(required = false) String id) {
return "ID: " + id;
}
この場合、両方:
http://localhost:8080/spring-mvc-basics/api/foos?id=abc
----
ID: abc
と
http://localhost:8080/spring-mvc-basics/api/foos
----
ID: null
メソッドを正しく呼び出します。
パラメータが指定されていない場合、メソッドパラメータはnullにバインドされます。
4.1. Javaの使用8オプション
または、パラメータをオプションでラップすることもできます。
@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam Optional<String> id){
return "ID: " + id.orElseGet(() -> "not provided");
}
この場合、必要な属性を指定する必要はありません。
また、リクエストパラメータが指定されていない場合は、デフォルト値が使用されます。
http://localhost:8080/spring-mvc-basics/api/foos
----
ID: not provided
5. リクエストパラメータのデフォルト値
defaultValue 属性を使用して、デフォルト値を@RequestParamに設定することもできます。
@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam(defaultValue = "test") String id) {
return "ID: " + id;
}
これはrequired=falseに似ており、ユーザーはパラメーターを指定する必要がなくなります。
http://localhost:8080/spring-mvc-basics/api/foos
----
ID: test
ただし、それでも提供できます。
http://localhost:8080/spring-mvc-basics/api/foos?id=abc
----
ID: abc
defaultValue 属性を設定すると、requiredが実際にfalseに設定されることに注意してください。
6. すべてのパラメータのマッピング
名前を定義せずに複数のパラメーターを設定したり、マップを使用してカウントしたりすることもできます。
@PostMapping("/api/foos")
@ResponseBody
public String updateFoos(@RequestParam Map<String,String> allParams) {
return "Parameters are " + allParams.entrySet();
}
これにより、送信されたパラメータが反映されます。
curl -X POST -F 'name=abc' -F 'id=123' http://localhost:8080/spring-mvc-basics/api/foos
-----
Parameters are {[name=abc], [id=123]}
7. 複数値パラメーターのマッピング
1つの@RequestParamは複数の値を持つことができます。
@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam List<String> id) {
return "IDs are " + id;
}
そしてSpringMVCはコンマ区切りのidパラメーターをマップします:
http://localhost:8080/spring-mvc-basics/api/foos?id=1,2,3
----
IDs are [1,2,3]
または個別のIDパラメーターのリスト:
http://localhost:8080/spring-mvc-basics/api/foos?id=1&id=2
----
IDs are [1,2]
8. 結論
この記事では、@RequestParam。の使用方法を学びました。
例の完全なソースコードは、GitHubプロジェクトにあります。