Вопрос

Я пытаюсь опубликовать данные XML в качестве тела для API REST.

У меня есть метод, который создает запрос под названием 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;
    }

Моя проблема - метод. SetRequestentity говорит, что метод не может быть найден.

У меня есть

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.methods.*;

Если я устанавливаю method = postmethod вместо Method = dorest, это работает, но я не хочу делать это во всех других моих методах, просто чтобы создать запросы.

Есть ли что -то, что мне не хватает, почему метод. 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 вместо boolean. Анкет Пройти в null для получения и значения для поста. Используйте это в качестве проверки, чтобы увидеть, нужен ли вам PostMethod или 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. Анкет Кроме того, ваше тело должно быть завернуто в StringEntity, не StringRequestEntity, импортируется из org.apache.http.entity.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top