2010-03-22 21 views
51

C'è un modo per ottenere i dati del post stesso? So che le molle gestiscono il binding dei dati dei post agli oggetti java. Ma, dati due campi che voglio elaborare, come posso ottenere quei dati?Come ottenere esplicitamente i dati del post in Spring MVC?

Ad esempio, supponiamo che la mia forma aveva due campi:

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

Come potrei fare per il recupero di quei valori nel mio controller?

risposta

99

Se si utilizza una delle istanze del controller incorporato, uno dei parametri del metodo del controller sarà l'oggetto Request. È possibile chiamare request.getParameter("value1") per ottenere il valore di dati Post.

Se si utilizza annotazioni Spring MVC, è possibile aggiungere un parametro annotato ai parametri del metodo:

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

funziona con molti parametri di richiesta, ha ragione? Non devi avvolgere in un oggetto? http://stackoverflow.com/q/12862320/106261 – NimChimpsky

+0

Sì, funziona con qualsiasi numero di parametri con nome. –

+0

<3 questo per le volte in cui non si desidera/richiede un modulo con il modello (per un modulo di ricerca, un modulo di contatto, ecc.) – mmcrae

24

Spring MVC viene eseguito sopra l'API Servlet. Quindi, è possibile utilizzare HttpServletRequest#getParameter() per questo:

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

Il HttpServletRequest dovrebbe già essere a disposizione di voi all'interno Spring MVC come uno degli argomenti di metodo del metodo handleRequest().

+1

Hai @BalusC, nel mio caso ho più di 20 variabili a richiesta. Comunque ho un bean con tutte le variabili param richieste. Ora voglio ottenere tutti i valori in bean dalla richiesta invece di ottenerli uno per uno. Abbiamo questa caratteristica in struts2 usando "ModelDrivenBean". Abbiamo alcune funzionalità come questa nella struttura di primavera. – vissu

+2

Sì, utilizzando l'annotazione @ModelAttribute e un bean di supporto del modulo. Questo link descrive bene come farlo: http://viralpatel.net/blogs/2010/07/spring-3-mvc-handling-forms.html –

+0

@vissu se hai più di 20 variabili dovresti davvero guardare alla semplificazione – CodeMonkey

24

Un'altra risposta alla domanda precisa del PO è quello di impostare il tipo di consumes contenuto "text/plain" e quindi dichiarare un @RequestBody String parametro di input. Questo passerà il testo dei dati POST come variabile dichiarata String (postPayload nell'esempio seguente).

Naturalmente questo presuppone che il carico utile POST sia costituito da dati di testo (come indicato dall'OP stesso).

Esempio:

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

Questa è la risposta che stavo cercando. Con "i dati del post stesso", capisco lo stesso. Grazie! – mauromartini

+0

Per più parametri di post (come 'valore1' e' valore2', questo creerebbe una stringa per entrambi i valori? Quindi sarebbe necessario analizzare i singoli valori? Perché farlo quando è possibile specificare/ottenere ogni valore singolarmente come in la risposta accettata? – mmcrae

+1

@mmcrae - è semplicemente un altro modo per risolvere il problema, e forse utile per altri utenti che non hanno più parametri POST ma invece hanno solo un blob di testo o dati binari. Questa era la mia situazione, e è quello che speravo di imparare quando ho cliccato su questa domanda – simon

Problemi correlati