Java postmethode mit XML
-
27-10-2019 - |
Frage
Ich versuche XML -Daten als Körper für eine REST -API zu veröffentlichen.
Ich habe eine Methode, die die Anfrage namens Dorest erstellt.
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);
}
und die Dorest -Methode
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;
}
Mein Problem ist die Methode.
Ich habe
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.methods.*;
Wenn ich Methode = postmethod anstelle von method = dorest setze, funktioniert es, aber ich möchte das nicht in allen anderen Methoden tun, um Abfragen zu erstellen.
Fehlt mir etwas, warum die Methode.SetRequestentity nicht so funktioniert, wie sie gerade ist?
Bearbeiten: Ich habe meine Informationen für die Verwendung von SetRequestentity von erhalten Postmethode SetRequestBody (String) veraltet - Warum?
EDIT 2: Hier ist, was ich am Ende getan habe.
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;
}
Lösung
Sie sollten ändern doREST
um die zu akzeptieren RequestEntity
anstelle einer boolean
. Eingeben null
für einen Get und einen Wert für Post. Verwenden Sie das als Scheck, um festzustellen, ob Sie eine benötigen PostMethod
oder ein GetMethod
. Dann können Sie den spezifischen Typ haben, damit Sie das aufrufen können PostMethod
nur setRequestEntity()
.
BEARBEITEN:
Sie können die Besetzung wie diese vermeiden:
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;
}
Andere Tipps
Die Methode, die Sie aufrufen sollten, ist setEntity
, nicht setRequestEntity
. Außerdem sollte Ihr Körper in a eingewickelt werden StringEntity
, kein StringRequestEntity
, importiert von org.apache.http.entity
.