XMLを使用したJava PostMethod
-
27-10-2019 - |
質問
XMLデータをボディとしてレストAPIに投稿しようとしています。
Dorestという要求を作成する方法があります。
String url = null;
HttpMethod method;
LOG.info("QUERY: " + query);
if (StringUtil.isEmpty(query)) {
url = BuildRequestURL("/issues.ashx/issues/mywork");
method = doREST(url, false);
} else {
url = BuildRequestURL("/issues.ashx/issues/filters");
//method = doREST(url, true);
method = doREST(url, true);
String xml = "<IssuesFilterEN>" +
"<IssueID>" + query + "</IssueID>" +
"</IssuesFilterEN>";
RequestEntity entity = new StringRequestEntity(xml,"text/xml; charset=iso-8859-1", null);
method.setRequestEntity(entity);
}
そしてドレスト法
private HttpMethod doREST(String request, boolean post) throws Exception {
String uri = request;
HttpMethod method = post ? new PostMethod(uri) : new GetMethod(uri);
configureHttpMethod(method);
HttpClient client = getHttpClient();
client.getParams().setParameter(HttpClientParams.SO_TIMEOUT, timeoutLength);
client.executeMethod(method);
return method;
}
私の問題は方法です。セットレクエステントは、この方法が見つからないと言っています。
私は持っている
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.methods.*;
method = postmethodの代わりにmethod = methodを設定した場合、それは動作しますが、クエリを作成するためだけに他のすべてのメソッドでそれを行う必要はありません。
なぜMethod.setRequestentityが今のように機能していない理由について私が欠けていることはありますか?
編集:setRequestentityを使用するための情報を入手しました PostMethod setRequestBody(String)が非推奨 - なぜですか?
編集2:これが私がやったことです。
private HttpMethod doREST(String request, RequestEntity entity) throws Exception {
String uri = request;
HttpMethod method;
if ( entity != null ){
method = new PostMethod(uri);
((PostMethod) method).setRequestEntity(entity);
} else {
method = new GetMethod(uri);
}
configureHttpMethod(method);
HttpClient client = getHttpClient();
client.getParams().setParameter(HttpClientParams.SO_TIMEOUT, timeoutLength);
client.executeMethod(method);
return method;
}
解決
変更する必要があります doREST
を受け入れる RequestEntity
aの代わりに boolean
. 。渡されます null
POSTの取得と値の場合。それをチェックとして使用して、 PostMethod
またはa GetMethod
. 。次に、特定のタイプを使用できるように、 PostMethod
それだけ setRequestEntity()
.
編集:
あなたはこのようなキャストを避けることができます:
private HttpMethod doREST(String request, RequestEntity entity) throws Exception {
String uri = request;
HttpMethod method;
if ( entity != null ){
PostMethod postMethod = new PostMethod(uri);
postMethod.setRequestEntity(entity);
method = postMethod;
} else {
method = new GetMethod(uri);
}
configureHttpMethod(method);
HttpClient client = getHttpClient();
client.getParams().setParameter(HttpClientParams.SO_TIMEOUT, timeoutLength);
client.executeMethod(method);
return method;
}
他のヒント
呼び出すべき方法はです setEntity
, 、 いいえ setRequestEntity
. 。また、あなたの体はaに包まれるべきです StringEntity
, 、ではありません StringRequestEntity
, 、から輸入 org.apache.http.entity
.
所属していません StackOverflow