リクエストとレスポンスの処理(バックエンド開発の基礎)

一、リクエスト

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を使用してマッピングできます。

注意:@RequestParamrequired属性はデフォルトで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";
}
  1. パスパラメータ
  • リクエスト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);
    }
}

タグ: SpringBoot HttpServletRequest @RequestParam @DateTimeFormat @RequestBody

5月25日 15:29 投稿