Java HttpServer/HttpExchange で GET のクエリ文字列を取得するにはどうすればよいでしょうか? 質問する

Java HttpServer/HttpExchange で GET のクエリ文字列を取得するにはどうすればよいでしょうか? 質問する

GET リクエストを処理するために Java でシンプルな HttpServer を作成しようとしていますが、リクエストの GET パラメータを取得しようとすると、HttpExchange クラスにそのためのメソッドがないことに気付きました。

GET パラメータ (クエリ文字列) を読み取る簡単な方法を知っている人はいますか?

私のハンドラーは次のようになります:

public class TestHandler{
  @Override
  public void handle(HttpExchange exc) throws IOxception {
    String response = "This is the reponse";
    exc.sendResponseHeaders(200, response.length());

    // need GET params here

    OutputStream os = exc.getResponseBody();
    os.write(response.getBytes());
    os.close();
  } 
}

..そしてメインメソッド:

public static void main(String[] args) throws Exception{
  // create server on port 8000
  InetSocketAddress address = new InetSocketAddress(8000);
  HttpServer server = new HttpServer.create(address, 0);

  // bind handler
  server.createContext("/highscore", new TestHandler());
  server.setExecutor(null);
  server.start();
}

ベストアンサー1

次の:httpExchange.getRequestURI().getQuery()

次のような形式で文字列を返します。"field1=value1&field2=value2&field3=value3..."

つまり、文字列を自分で解析するだけで済みます。解析関数は次のようになります。

public Map<String, String> queryToMap(String query) {
    if(query == null) {
        return null;
    }
    Map<String, String> result = new HashMap<>();
    for (String param : query.split("&")) {
        String[] entry = param.split("=");
        if (entry.length > 1) {
            result.put(entry[0], entry[1]);
        }else{
            result.put(entry[0], "");
        }
    }
    return result;
}

これを次のように使用できます。

Map<String, String> params = queryToMap(httpExchange.getRequestURI().getQuery()); 
System.out.println("param A=" + params.get("A"));

おすすめ記事