JAX-RS avec Jersey: pour Passer des paramètres à METTRE la méthode pour la mise à jour d'une Ressource
- Je mettre à jour un enregistrement de Personne ayant firstName et lastName. L'utilisateur devrait être capable de changer de forme de html et de le soumettre doit être mis à jour.
Voici mon code.
@PUT
@Path("/{userId}")
public Response updatingResource(@FormParam("firstName") String firstName, @FormParam("lastName ") String lastName , @PathParam("userId") String userId){
System.out.println(firstName);
System.out.println(lastName);
return Response.ok().build();
}
la SOP états imprime la valeur null. J'ai été en utilisant Mozilla Firefox Affiche du plugin pour envoyer des requêtes PUT.
J'ai aussi essayé en annotant avec @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
, mais encore il est l'impression null pour chaque valeurs.
Comment écrire et appeler MIS méthode qui reçoit ces trois valeurs. Je trébuche autour de beaucoup et les gens ont demandé à utiliser JSON ou XML. Comment puis-je utiliser JSON? Je serais très greatfull si quelqu'un peut m'aider à écrire RESTE la méthode pour mettre à jour une ressource
Si j'envoie la requête PUT à l'aide de Firefox RESTClient et Google reste-client je suis en mesure d'obtenir les paramètres du formulaire. Les deux cet outil a quelque chose comme corps de l'article où j'ai placé firstName=Amit&lastName=Patel
. Aussi j'ai ajouté de l'en-tête Content-Type
comme application/x-www-form-urlencoded
.Je pense que Firefox est Affiche est buggé. Quelqu'un peut-il me suggérer une autre manière je dois valider le code ou je peux faire confiance sur les deux premiers REPOS clients?
OriginalL'auteur Amit Patel | 2011-05-11
Vous devez vous connecter pour publier un commentaire.
En plus de l'annotation de votre méthode avec
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
, vous devez envoyerapplication/x-www-form-urlencoded
comme un type de contenu. Avez-vous le faire?Édité: Vous pouvez utiliser FormParams seulement avec POST:
Oh, ne pas faire attention à ce que vous utilisez: vous devez utiliser POST avec les paramètres de formulaire.
Si vous souhaitez modifier la ressource que vous devez utiliser pour METTRE. Méthode POST est utilisée lorsque vous souhaitez créer des ressources. Ici je veux changer la Personne des détails tellement l'habitude de METTRE. Dois-je utiliser des POST à la place?
Oui, je sais, mais les paramètres de formulaire fonctionne uniquement avec la POSTE. Voir le fichier de réponse.
Vous pouvez également obtenir les valeurs null Si le paramètre "id" tag au lieu de "nom" de la balise dans votre formulaire html définitions de champ. Donc <input type="text" id="pseudo" /> renvoie la valeur null mais <input type="text" name="pseudo" /> sera de retour le bon résultat.
OriginalL'auteur Tarlog
Alternativement, vous pouvez utiliser une approche comme indiqué dans Remplacer la méthode HTTP avec JAX-RS :
En gros, vous ajoutez un paramètre caché /en-tête HTTP et ensuite de POSTER le formulaire. Dans votre servlet, vous devez ajouter un Filtre qui vérifie certaines d'en-tête /caché élément de formulaire et les changements de POSTE en METTRE de la demande. C'est acheminé à votre ressource et consommé correctement lorsque annotée avec METTRE.
Hum, difficile à dire, après avoir accroché le Filtre de votre servlet, il doit avoir modifié la demande en tant que de besoin. Toutes les erreurs que vous obtenez?
Veuillez vérifier ma réponse ci-dessous. Je pense que j'ai été en utilisant buggy outil pour envoyer RESTE MIS demande
Avec la méthode ci-dessus, vous devriez être en mesure de POSTE (qui tous les navigateurs peuvent le faire) et ajouter l'en-tête de sorte que le Maillot filtre à coups de pied ou ajouter une forme cachée de paramètre (dans le cas du Ressort filtre mentionné dans le post). Donc, la demande sera transformé de l'intérieur, après avoir atteint le serveur à la requête PUT.
OriginalL'auteur Dirk
il n'est pas vrai que METTRE n'accepte pas FormParameters. J'utilise @FormParam avec METTRE avec succès. C'est peut-être le @PathParam. Je n'ai pas essayé.
Il semble y avoir aucun besoin pour des annotations. Voici une classe ouvrière dans mon application:
Il est appelé à partir de jQuery comme suit:
${pageContext.demande.contextPath} est de JSP
OriginalL'auteur Micha Roon