質問

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.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top