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;
    }
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top