1. ホーム
  2. java

[解決済み] commons httpclient - GET/POSTリクエストにクエリ文字列パラメータを追加する

2023-05-26 20:23:59

質問

Springサーブレットにhttpコールをするために、commons HttpClientを使用しています。私はクエリ文字列にいくつかのパラメータを追加する必要があります。だから私は次のようにします。

HttpRequestBase request = new HttpGet(url);
HttpParams params = new BasicHttpParams();
params.setParameter("key1", "value1");
params.setParameter("key2", "value2");
params.setParameter("key3", "value3");
request.setParams(params);
HttpClient httpClient = new DefaultHttpClient();
httpClient.execute(request);

しかし、サーブレットでパラメータを読み込もうとすると

((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest().getParameter("key");

とすると、NULLを返します。実際、parameterMapは完全に空です。HttpGetリクエストを作成する前に手動でパラメータをURLに追加すると、サーブレットでパラメータが利用可能になります。ブラウザからqueryStringを付加したURLを使ってサーブレットを叩くと、同じようになります。

ここでのエラーは何でしょうか?httpclient 3.x では、GetMethod にクエリ文字列を追加するための setQueryString() メソッドがありました。4.xでの同等のものは何ですか?

どのように解決するのですか?

HttpClient 4.2以降でクエリ文字列パラメータを追加する方法を説明します。

URIBuilder builder = new URIBuilder("http://example.com/");
builder.setParameter("parts", "all").setParameter("action", "finish");

HttpPost post = new HttpPost(builder.build());

結果のURIは次のようになります。

http://example.com/?parts=all&action=finish