Java PostMethod with xml

时间:2011-04-29 16:27:41

标签: java apache-commons-httpclient

我正在尝试将XML数据作为正文发布到REST 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);
    }

和doREST方法

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;
    }

我的问题是method.setRequestEntity说无法找到该方法。

我有

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

如果我设置method = PostMethod而不是method = doREST它可以工作,但我不想在我的所有其他方法中这样做只是为了创建查询。

我是否遗漏了为什么method.setRequestEntity不能正常工作的原因?

编辑: 我从PostMethod setRequestBody(String) deprecated - why?

获取了使用setRequestEntity的信息

编辑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;
    }

2 个答案:

答案 0 :(得分:3)

您应该修改doREST以接受RequestEntity而不是boolean。传入null获取GET和POST值。使用它作为检查,看看您是否需要PostMethodGetMethod。然后,您可以使用特定类型,这样您就可以只调用PostMethod {。{1}}。

编辑:

你可以避免这样的演员:

setRequestEntity()

答案 1 :(得分:1)

您应该致电的方法是setEntity,而不是setRequestEntity。此外,您的遗体应该包裹在从StringRequestEntity导入的StringEntity而不是org.apache.http.entity