我正在尝试将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;
}
答案 0 :(得分:3)
您应该修改doREST
以接受RequestEntity
而不是boolean
。传入null
获取GET和POST值。使用它作为检查,看看您是否需要PostMethod
或GetMethod
。然后,您可以使用特定类型,这样您就可以只调用PostMethod
{。{1}}。
编辑:
你可以避免这样的演员:
setRequestEntity()
答案 1 :(得分:1)
您应该致电的方法是setEntity
,而不是setRequestEntity
。此外,您的遗体应该包裹在从StringRequestEntity
导入的StringEntity
而不是org.apache.http.entity
。