java - recibir - requestmapping post
Cómo pasar un atributo de sesión como argumento de método(parámetro) con Spring MVC (3)
En resumen, quiero algo como:
public String action(@SessionAttribute User user) {..}
en lugar de
public String action(HttpSession session) {
User user = session.getAttribute("user");
}
Principalmente por el bien de:
- legibilidad
- examen de la unidad
Encontré una solución .
La idea es registrar un WebArgumentResolver
personalizado para AnnotationMethodHandlerAdapter
, que maneja una anotación personalizada - @SessionAttribute
(o @SessionParam
).
Una nota para el código publicado allí es que se puede usar param.getParameterName()
si no se especifica ningún value
.
Incluso si usamos @ModelAttribute ("usuario") Usuario como el parámetro del método y luego usamos el objeto del usuario en su método, habrá actualizado al usuario de la sesión. El nombre del atributo debe coincidir con el nombre del atributo de sesión "usuario".
public String myMethod( @ModelAttribute("user") User user ){
System.out.println(user.getDetails());
}
Para aquellos que llegan a través de Google, como mínimo 4.3.2.RELEASE, Spring incluye una anotación @SessionAttribute
incorporada:
public String action(
@SessionAttribute(required=false, name="user") User user) {
// ...
}
Una solución personalizada ya no es necesaria.