Question

Je suis en train de données XML poste en tant que corps à un api REST.

J'ai une méthode qui crée la demande appelée 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);
    }

et la méthode 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;
    }

Ma question est la method.setRequestEntity dit que la méthode n'a pas pu être trouvé.

J'ai

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

Si i = méthode set PostMethod au lieu de la méthode = Dorest cela fonctionne, mais je ne veux pas avoir à le faire dans toutes mes autres méthodes juste pour créer des requêtes.

Y at-il quelque chose que je suis absent pourquoi le method.setRequestEntity ne fonctionne pas la façon dont il est en ce moment?

EDIT: Je suis mes informations pour l'utilisation de setRequestEntity PostMethod setRequestBody (String) dépréciée - pourquoi

EDIT 2: Voici ce que je fini par faire.

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;
    }
Était-ce utile?

La solution

Vous devez modifier doREST d'accepter la RequestEntity au lieu d'un boolean. Passez à null pour un GET et POST pour une valeur. Utilisez que la vérification pour voir si vous avez besoin d'un PostMethod ou un GetMethod. Ensuite, vous pouvez avoir le type spécifique de sorte que vous pouvez appeler le PostMethod que setRequestEntity().

EDIT:

Vous pouvez éviter le casting comme ceci:

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

Autres conseils

La méthode que vous devriez appellerez est setEntity , pas setRequestEntity. En outre, votre corps doit être enveloppé dans un

scroll top