一、リクエスト
1. 簡単なパラメータ
- 原始的な方法:
従来のウェブアプリケーションでは、HttpServletRequestオブジェクトを使用して手動でリクエストパラメータを取得します。
@RequestMapping("/simpleParam")
public String simpleParam(HttpServletRequest request) {
String name = request.getParameter("name");
String ageStr = request.getParameter("age");
int age = Integer.parseInt(ageStr);
System.out.println(name + age);
return "OK";
}
- Spring Bootの方法
パラメータ名とメソッドの引数名が一致している場合、引数を定義するだけでパラメータを受け取ることができます。
@RequestMapping("/simpleParam")
public String simpleParam(String name, Integer age) {
System.out.println(name + age);
return "OK";
}
メソッドの引数名とリクエストパラメータ名が一致しない場合は、@RequestParamを使用してマッピングできます。
注意:@RequestParamのrequired属性はデフォルトでtrueであり、必須パラメータを示します。この属性はfalseに設定することも可能です。
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name = "name") String username, Integer age) {
System.out.println(username + age);
return "OK";
}
2. エンティティパラメータ
- シンプルなエンティティオブジェクト:リクエストパラメータ名と引数オブジェクトのプロパティ名が一致している場合、POJOを定義して受け取ります。
3. 配列とリストパラメータ
- 配列パラメータ:リクエストパラメータ名と引数の配列名が一致し、複数の値がある場合、配列型の引数を定義して受け取ります。
@RequestMapping("/arrayParam")
public String arrayParam(String[] hobby) {
System.out.println(Arrays.toString(hobby));
return "OK";
}
- リストパラメータ:
@RequestParamアノテーションを使用してパラメータをバインドします。
@RequestMapping("/listParam")
public String listParam(@RequestParam List<String> hobby) {
System.out.println(hobby);
return "OK";
}
4. 日付パラメータ
@DateTimeFormatアノテーションを使用して日付パラメータの形式変換を行います。
@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime) {
System.out.println(updateTime);
return "OK";
}
5. JSONパラメータ
- JSONデータのキー名と引数オブジェクトのプロパティ名が一致している場合、POJO型の引数を定義して受け取ります。
@RequestBodyを使用してJSONデータをマッピングします。
@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user) {
System.out.println(user);
return "OK";
}
- パスパラメータ
- リクエストURLから直接パラメータを渡す場合、
{...}を使用してパスパラメータを指定し、@PathVariableを使用して取得します。
@RequestMapping("/path/{id}")
public String pathParam(@PathVariable Integer id) {
System.out.println(id);
return "OK";
}
複数のパスパラメータを取得する場合
@RequestMapping("/path/{id}/{name}")
public String pathParam(@PathVariable Integer id, @PathVariable String name) {
System.out.println(id);
System.out.println(name);
return "OK";
}
二、レスポンス
1. @ResponseBody
- タイプ:メソッドアノテーション、クラスアノテーション
- 位置:Controllerメソッド
- 効果:メソッドの戻り値を直接レスポンスとして返す。戻り値がエンティティオブジェクトまたはコレクションの場合、JSON形式に変換して返す。
- 説明:
@RestController=@Controller+@ResponseBody
2. 一貫したレスポンス結果
- 一貫したレスポンス結果を格納するクラス
public class ApiResponse {
private Integer code; // 1: 成功, 0: 失敗
private String message; // メッセージ
private Object data; // データ
public ApiResponse(Integer code, String message, Object data) {
this.code = code;
this.message = message;
this.data = data;
}
public ApiResponse() {}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public static ApiResponse success(Object data) {
return new ApiResponse(1, "success", data);
}
public static ApiResponse success() {
return new ApiResponse(1, "success", null);
}
public static ApiResponse error(String message) {
return new ApiResponse(0, message, null);
}
@Override
public String toString() {
return "ApiResponse{" +
"code=" + code +
", message='" + message + '\'' +
", data=" + data +
'}';
}
}
@RestController
public class ResponseController {
@RequestMapping("/hello")
public ApiResponse hello() {
System.out.println("Hello, world");
return ApiResponse.success("hello, world");
}
@RequestMapping("/getAddr")
public ApiResponse getAddr() {
Address addr = new Address();
addr.setProvince("広東");
addr.setCity("深圳");
return ApiResponse.success(addr);
}
@RequestMapping("/listAddr")
public ApiResponse listAddr() {
ArrayList<Object> list = new ArrayList<>();
Address addr1 = new Address();
addr1.setProvince("広東");
addr1.setCity("深圳");
Address addr2 = new Address();
addr2.setProvince("湖南");
addr2.setCity("長沙");
list.add(addr1);
list.add(addr2);
return ApiResponse.success(list);
}
}