2010-03-22 3 views
51

Existe-t-il un moyen d'obtenir les données de publication elle-même? Je sais que Spring gère les données postales de liaison aux objets Java. Mais, compte tenu de deux champs que je veux traiter, comment puis-je obtenir ces données?Comment obtenir explicitement des données de publication dans Spring MVC?

Par exemple, supposons que ma forme avait deux champs:

<input type="text" name="value1" id="value1"/> 
<input type="text" name="value2" id="value2"/> 

Comment pourrais-je aller sur la récupération de ces valeurs dans mon contrôleur?

Répondre

99

Si vous utilisez l'une des instances de contrôleur intégrées, l'un des paramètres de votre méthode de contrôleur sera l'objet Request. Vous pouvez appeler le request.getParameter("value1") pour obtenir la valeur de données Post.

Si vous utilisez des annotations Spring MVC, vous pouvez ajouter un paramètre annoté aux paramètres de votre méthode:

@RequestMapping(value = "/someUrl") 
public String someMethod(@RequestParam("value1") String valueOne) { 
//do stuff with valueOne variable here 
} 
+1

fonctionne-t-il avec de multiples paramètres de requête, il a raison? Vous n'avez pas besoin d'envelopper dans un objet? http://stackoverflow.com/q/12862320/106261 – NimChimpsky

+0

Oui, cela fonctionne avec n'importe quel nombre de paramètres nommés. –

+0

<3 ceci pour les moments où vous ne voulez pas/besoin d'un formulaire soutenu par le modèle (pour un formulaire de recherche, ou un formulaire de contact, etc.) – mmcrae

24

Spring MVC s'exécute au-dessus de l'API Servlet. Ainsi, vous pouvez utiliser HttpServletRequest#getParameter() pour cela:

String value1 = request.getParameter("value1"); 
String value2 = request.getParameter("value2"); 

Le HttpServletRequest devrait déjà être à votre disposition à l'intérieur Spring MVC comme l'un des arguments de la méthode de la méthode handleRequest().

+1

Hai @BalusC, dans mon cas, j'ai plus de 20 variables dans la demande. Cependant j'ai un bean avec toutes les variables param de la requête. Maintenant je veux obtenir toutes les valeurs dans le bean de la demande au lieu d'obtenir un par un. Nous avons cette fonctionnalité dans struts2 en utilisant "ModelDrivenBean". Avons-nous une fonctionnalité comme celle-ci dans le cadre du printemps. – vissu

+2

Oui, en utilisant l'annotation @ModelAttribute et un bean backing de formulaire. Ce lien décrit bien comment faire cela: http://viralpatel.net/blogs/2010/07/spring-3-mvc-handling-forms.html –

+0

@vissu si vous avez plus de 20 variables, vous devriez vraiment chercher à simplifier – CodeMonkey

24

Une autre réponse à la question exacte de l'OP est de définir le type de contenu consumes-"text/plain" puis déclarer @RequestBody String paramètre d'entrée. Cela transmettra le texte des données POST sous la forme de la variable String déclarée (postPayload dans l'exemple suivant).

Bien sûr, cela suppose que vos données POST sont des données textuelles (comme indiqué dans le PO).

Exemple:

@RequestMapping(value = "/your/url/here", method = RequestMethod.POST, consumes = "text/plain") 
    public ModelAndView someMethod(@RequestBody String postPayload) {  
     // ...  
    } 
+2

Ceci est la réponse que je recherchais. Par 'les données de poste lui-même', je comprends la même chose. Merci! – mauromartini

+0

Pour plusieurs paramètres post (tels que 'value1' et' value2', cela créerait une chaîne pour les deux valeurs? Alors vous auriez besoin d'analyser les valeurs individuelles? Pourquoi faire cela quand vous pouvez spécifier/obtenir chaque valeur individuellement comme dans la réponse acceptée? – mmcrae

+1

@mmcrae - c'est simplement une autre façon de résoudre le problème, et peut-être utile à d'autres utilisateurs qui n'ont pas plusieurs paramètres POST mais qui ont plutôt une goutte de texte ou de données binaires. C'est ce que j'espérais apprendre quand j'ai cliqué sur cette question: – simon

Questions connexes