Récupérer les paramètres POST uniquement (Java)
Personne ne sait de ne POSTER que des paramètres à partir d'un objet HttpServletRequest?
IE, PHP $_POST superglobale Perl et CGI.pm récupérer uniquement les paramètres POST si la méthode HTTP POST (par défaut).
HttpServletRequest.getParameter(String) va inclure le GET paramètres d'URL, même si la méthode HTTP POST.
Si je comprends bien, vous souhaitez que les paramètres dans le corps POST et de ne PAS les paramètres de l'URL de message.
Exactement. C'est une description plus précise.
Exactement. C'est une description plus précise.
OriginalL'auteur dankuck | 2009-07-29
Vous devez vous connecter pour publier un commentaire.
Je suppose que l'une des solutions pourrait être d'analyser manuellement
HttpServletRequest.getQueryString()
et de vérifier si le paramètre n'est pas présent dans celui-ci.Une implémentation naïve (en ignorant url échappé valeurs de clé) serait quelque chose comme ça (non testé) :
Ah, je suppose que "solution de contournement" est le bon mot. Il se sent juste mal parce que je sais qu'il y est un code à faire quelque chose de très similaire caché quelque part.
df mentionne une classe appelée ParameterParser dans Apache HttpClient classe. Ce n'est pas en Java de la bibliothèque standard, mais au moins il pense à toutes les petites choses que nous avons peut-être oublié ici. Ensuite, le code pourrait passer par getParameterValues() et d'ignorer tout qui ont l'une des valeurs données par ParameterParser.parse().
Oui, c'est pourquoi il peut être utilisé pour résoudre les OP du problème. Quel est votre point?
Désolé, mon erreur.
OriginalL'auteur ykaganovich
À partir de ma compréhension, il n'y a pas des choses telles que la POSTE, les paramètres et les paramètres GET dans HTTP, il y a des POST et des méthodes GET. Quand une demande est faite à l'aide de la méthode POST, les paramètres, allez dans le corps du message. Dans le cas d'une requête GET, les paramètres, allez dans l'URL.
Ma première pensée était que c'était un bug de mise en œuvre dans votre conteneur de servlet. Mais, puisque les choses ne sont pas toujours comme vous le souhaitez, servlet java specification (au moins la version 2.4) ne fait pas de distinction entre les deux types de paramètres. Donc, il n'existe aucun moyen pour obtenir la poste ou les paramètres d'url à l'aide de l'API servlet.
Vous avez sûrement déjà avoir un plan B. Mais, juste au cas où, je poste les deux solutions de rechange qui est venu à mon esprit:
Si vous avez accès à le nom du paramètre de définition, vous pouvez utiliser un préfixe pour différencier entre les deux lorsque vous parcourez le getParameterNames() suite.
Vous pu analyser l'URL de la création d'un objet d'URL et en utilisant la méthode getQuery() pour obtenir les paramètres. Ensuite, analyser les paramètres sur la chaîne de requête en utilisant un utilitaire de classe comme ParameterParser dans HttpClient de la bibliothèque. Et enfin, soustraire que des noms de la getParameterNames() suite.
ParameterParser sonne comme un ensemble parfait pour la tâche d'identification des paramètres d'URL et de valeurs. Alors quelque chose comme le mécanisme de ykaganovich la réponse pourrait être utilisé.
OriginalL'auteur df.
Ne pourriez-vous obtenir les paramètres de la HttpServletRequest dans
doPost
oudoGet
dans une sous-classe deHttpServlet
?Tout ce que vous prenez (via
getParemeter
) à l'intérieur de doPost est un POSTE et rien à l'intérieur de doGet est un GET.Les requêtes Post peut avoir les deux paramètres GET et POST. Si seulement paramètre GET (dites "pseudo") est présente, ensuite, si vous faites la demande.getParameter("pseudo") à l'intérieur de doPost, vous obtenez le "surnom" paramètre GET, qui devrait être nulle à partir de votre explication.
OriginalL'auteur seth
Je pense que vous pourriez faire quelque chose avec getMethod() disponible à partir de l'Interface HttpServletRequest.
Java doc 1.6
Est également disponible dans la version 1.4 et 1.5.
OriginalL'auteur
Je ne sais pas si ça allait fonctionner, mais vous pourriez essayer d'extraire le contenu brut du POSTE corps à l'aide de
request.getReader()
. Le conteneur peut supprimer les données avant de confier le contrôle de votre application, bien que, et même si ce n'était pas le cas, vous auriez à décoder la chaîne de paramètre vous-même.OriginalL'auteur skaffman
La question a été répondue en ce poste:
OriginalL'auteur AlcaDotS