Java Postmethod с XML
-
27-10-2019 - |
Вопрос
Я пытаюсь опубликовать данные 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
.