Java PostMethod avec xml
-
27-10-2019 - |
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;
}
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