Comment puis-je afficher à l'aide de Java et comprennent des paramètres et un raw du corps de la requête?
Je suis en communication avec un service web qui attend un paramètre POST et également s'attendre à du corps de la Requête. J'ai confirmé qu'un tel POSTE, la demande peut être effectuée à l'aide d'un RESTE de la Console que j'ai, mais je suis incapable de faire une telle demande en Java à l'aide d'Apache bibliothèques.
Dans le code ci-dessous, je suis en mesure de publier sur le service web, et il reçoit correctement le contenu de la variable raw_body. Si je décommentez la première des deux lignes commentées, le service web reçoit le "fname" paramètre, mais il ne reçoit plus le corps de la POSTE.
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
...
HttpClient httpClient = new HttpClient();
String urlStr = "http://localhost:8080/MyRestWebService/save";
PostMethod method = new PostMethod(urlStr);
String raw_body = "This is a very long string, much too long to be just another parameter";
RequestEntity re = new StringRequestEntity(raw_body, "text/xml", "UTF-16");
//method.addParameter("fname", "test.txt");
//httpClient.getParams().setParameter("fname", "test.txt");
method.setRequestEntity(re);
Comment puis-je transmettre le paramètre et le corps?
OriginalL'auteur Data Skeptic | 2012-10-01
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le
setQueryString
méthode pour ajouter des paramètres à l'URL qui est Posté. À partir d'un Réparateur point de vue, je dirais que vous normalement ne devraient pas faire cela, cependant, depuis un POSTE doit représenter un appel à une ressource et tout ce qui serait admissible, pour un paramètre de requête doit être inclus dans la représentation, qui est transféré dans le corps de la requête...ou alors, il faut représenter la qualification de la ressource elle-même, auquel cas, il devrait être une partie du chemin qui est posté, ce qui pourrait ensuite être extraites par le contrôleur à l'aide de @PathVariable/@PathParam ou quelque chose de similaire. Donc dans votre cas vous pourriez également être à la recherche de quelque chose commePOST /MyRestWebService/files/test.txt
ou plus justement une place, si vous êtes économiser les ressources et le savoir de l'URI. Le code sur le serveur pourrait tirer le nom de fichier à partir d'un modèle d'URL.OriginalL'auteur Matt Whipple
Vous avez besoin de faire une requête POST à l'aide de plusieurs parties-forme. Voici l'exemple:
Apache HttpClient faire multipart post de formulaire
Alternativement, vous pouvez faire une requête POST avec le contenu (les paramètres et les fichiers encodés à l'aide de
application/x-www-form-urlencoded
mais il n'est pas recommandé lorsque vous souhaitez effectuer une requête POST avec un contenu de grande taille, comme les fichiers.ce n'est pas vrai. elle est également appliquée pour les petits paramètres. l'ajout de la chaîne de requête pour une requête POST n'est pas recommandé. certains http gestionnaire de logiciel ne peut pas analyser la requête de la partie d'une demande POST car il ne s'attend pas à ça. si cela ne fonctionne pas sur votre serveur, qui peut être la cause. aussi longtemps que cela fonctionne sur votre serveur puis vous utilisez ce qui fonctionne le mieux pour vous. mais à partir de la conception de point de vue, il n'est pas recommandé.
OriginalL'auteur gigadot