JavaでHttpServletRequestを使用してリクエストのパラメータを取得

HttpServletRequestからリクエストのパラメータを取得

HttpServletRequestの使用が考えられる場面

SpringBootなどのフレームワークのコントローラでは、通常リクエストのパラメータをメソッド引数として自動的にマッピングできますが、HttpServletRequestを直接使用してパラメータを取得しなければいけない場面もいくつかあります。
例えば以下のようなケースです。

フィルタやインターセプタ内でのリクエスト処理
フィルタやインターセプタを使ってコントローラの前後に処理を挿入するケースは多々ありますが、これらのコンポーネントはコントローラに到達する前に実行されるため、コントローラのメソッド引数バインディングは使えません。
普段コントローラの実装しかしない人は戸惑うでしょうね。私も戸惑いました。
この場合はHttpServletRequestを直接操作して、パラメータやリクエスト情報を取得する必要があります。

動的にパラメータ名が変わる場合
リクエストパラメータの名前が動的に変わる、または何が送信されるかが事前に分からない場合は、メソッド引数としてマッピングできないため、HttpServletRequestを使ってすべてのパラメータを取得し、動的に処理することになります。(あまりないケースですが)

HttpServletRequestでパラメータを取得する方法

HttpServletRequestから特定のパラメータを取得する場合、以下の3つのメソッドが使用できます。

1. getParameter(String name)
指定された名前のリクエストパラメータの値を取得します。
値は文字列として返されます。
パラメータが存在しない場合は null が返されます。

String value = request.getParameter("paramName");

2. getParameterValues(String name)
指定された名前のリクエストパラメータのすべての値を配列で取得します。
複数の値を持つパラメータ(例:チェックボックス)に対して使用されます。
パラメータが存在しない場合は null が返されます。

String[] values = request.getParameterValues("paramName");

3. getParameterMap()
すべてのリクエストパラメータの名前と値を Map で取得します。

Map<String, String[]> paramMap = request.getParameterMap();

サンプルコード

以下は、リクエストから特定のパラメータを取得するサンプルコードです:

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

public class ParameterExample {
    public void handleRequest(HttpServletRequest request) {

        // 単一のパラメータを取得
        String singleParam = request.getParameter("singleParam");

        // 単一のパラメータの表示
        System.out.println("Single Parameter: " + singleParam);


        // 複数の値を持つパラメータを取得
        String[] multiParams = request.getParameterValues("multiParam");

        // 複数のパラメータの表示
        if (multiParams != null) {
            for (String value : multiParams) {
                System.out.println("Multi Parameter Value: " + value);
            }
        }

        // すべてのパラメータを取得
        Map<String, String[]> allParams = request.getParameterMap();

        // すべてのパラメータを表示
        for (Map.Entry<String, String[]> entry : allParams.entrySet()) {
            System.out.print("Parameter Name: " + entry.getKey() + " Values: ");
            for (String value : entry.getValue()) {
                System.out.print(value + " ");
            }
        }
    }
}

フレームワークによっては他の方法で取得することもできますが、HttpServletRequestであれば上記のような方法で簡単に取得することができます。