2010-03-22 13 views
51

¿Hay alguna manera de obtener los datos de la publicación en sí? Sé que Spring maneja datos de correos vinculantes para objetos java. Pero, dados dos campos que quiero procesar, ¿cómo puedo obtener esos datos?¿Cómo obtener datos de publicación explícitamente en Spring MVC?

Por ejemplo, supongamos que mi forma tenían dos campos:

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

¿Cómo hago para recuperar esos valores en el controlador?

Respuesta

99

Si está utilizando una de las instancias de controlador incorporadas, entonces uno de los parámetros de su método de controlador será el objeto Request. Puede llamar al request.getParameter("value1") para obtener el valor de datos de publicación.

Si está utilizando anotaciones Spring MVC, puede agregar un parámetro anotado a los parámetros de su método:

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

¿funciona esto con los parámetros de solicitud de múltiples, lo hace a la derecha? ¿No tienes que envolver un objeto? http://stackoverflow.com/q/12862320/106261 – NimChimpsky

+0

Sí, funciona con cualquier cantidad de parámetros nombrados. –

+0

<3 esto para momentos en que no desea/necesita un formulario respaldado por un modelo (para un formulario de búsqueda, o un formulario de contacto, etc.) – mmcrae

24

Spring MVC se ejecuta en la parte superior de la API del servlet. Por lo tanto, se puede utilizar para este HttpServletRequest#getParameter():

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

El HttpServletRequest ya debería estar disponible para usted dentro Spring MVC como uno de los argumentos del método del método handleRequest().

+1

Hai @BalusC, en mi caso tengo más de 20 variables en la solicitud. Sin embargo, tengo un bean con todas las variables de parámetro de solicitud. Ahora quiero obtener todos los valores en bean de solicitud en lugar de obtener uno por uno. Tenemos esta característica en struts2 utilizando "ModelDrivenBean". ¿Tenemos alguna característica como esta en el marco de la primavera? – vissu

+2

Sí, usando la anotación @ModelAttribute y un bean de respaldo de formulario. Este enlace describe muy bien cómo hacerlo: http://viralpatel.net/blogs/2010/07/spring-3-mvc-handling-forms.html –

+0

@vissu si tiene más de 20 variables que realmente debería considerar simplificar – CodeMonkey

24

Otra respuesta a la pregunta exacta de la OP es para establecer el tipo consumes contenido a "text/plain" y luego declarar una @RequestBody String parámetro de entrada. Esto pasará el texto de los datos POST como la variable String declarada (postPayload en el siguiente ejemplo).

Por supuesto, esto supone que su carga de POST es datos de texto (como el OP indica que era el caso).

Ejemplo:

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

Esta es la respuesta que estaba buscando. Por 'los datos de la publicación' entiendo lo mismo. ¡Gracias! – mauromartini

+0

Para paramúltiples params (como 'value1' y' value2', esto crearía una cadena para ambos valores? Entonces, ¿tendría que analizar los valores individuales? ¿Por qué hacer eso cuando se puede especificar/obtener cada valor individualmente como en la respuesta aceptada? – mmcrae

+1

@mmcrae - es simplemente otra forma de resolver el problema, y ​​tal vez útil para otros usuarios que no tienen múltiples parámetros POST, sino que simplemente tienen una burbuja de texto o datos binarios. Esa era mi situación, y eso es lo que esperaba aprender cuando hice clic en esta pregunta. – simon

Cuestiones relacionadas