本体にjsonオブジェクトを含むHTTPGETを送信しようとしています。 HttpClient HttpGetの本体を設定する方法はありますか? HttpPost#setEntityに相当するものを探しています。
私の知る限り、Apacheライブラリに付属しているデフォルトのHttpGetクラスではこれを行うことはできません。ただし、HttpEntityEnclosingRequestBaseエンティティをサブクラス化し、メソッドをGETに設定することはできます。私はこれをテストしていませんが、次の例があなたが探しているものかもしれないと思います:
import org.Apache.http.client.methods.HttpEntityEnclosingRequestBase;
public class HttpGetWithEntity extends HttpEntityEnclosingRequestBase {
public final static String METHOD_NAME = "GET";
@Override
public String getMethod() {
return METHOD_NAME;
}
}
編集:
次に、次のことを実行できます。
...
HttpGetWithEntity e = new HttpGetWithEntity();
...
e.setEntity(yourEntity);
...
response = httpclient.execute(e);
トルビンスキーの答えを使って、上記のクラスを作成しました。これにより、HttpPostに同じメソッドを使用できます。
import Java.net.URI;
import org.Apache.http.client.methods.HttpPost;
public class HttpGetWithEntity extends HttpPost {
public final static String METHOD_NAME = "GET";
public HttpGetWithEntity(URI url) {
super(url);
}
public HttpGetWithEntity(String url) {
super(url);
}
@Override
public String getMethod() {
return METHOD_NAME;
}
}
Torbinskyの答えに加えて、これらのコンストラクターをクラスに追加して、URIの設定を簡単にすることができます。
public HttpGetWithEntity(String uri) throws URISyntaxException{
this.setURI(new URI(uri));
}
public HttpGetWithEntity(URI uri){
this.setURI(uri);
}
setURI
メソッドはHttpEntityEnclosingRequestBase
から継承され、コンストラクターの外部で使用することもできます。
この例では、HttpGetとHttpPostのようにリクエストURIを送信する方法???
public class HttpGetWithEntity extends HttpEntityEnclosingRequestBase
{
public final static String METHOD_NAME = "GET";
@Override
public String getMethod() {
return METHOD_NAME;
}
HttpGetWithEntity e = new HttpGetWithEntity();
e.setEntity(yourEntity);
response = httpclient.execute(e);
}