2010-07-25 18 views
8

No puedo encontrar una solución a esto, y me está volviendo loco. Tengo @Controller mapeado que responde a varios métodos usando @RequestMapping. Me gustaría etiquetar uno de esos métodos como predeterminado cuando no se especifica nada más específico. Por ejemplo:¿Cómo crear un método predeterminado en SpringMVC utilizando anotaciones?

@Controller 
@RequestMapping("/user/*") 
public class UserController { 

    @RequestMapping("login") 
    public String login(MapModel model) {} 

    @RequestMapping("logout") 
    public String logout(MapModel model) {} 

    @RequestMapping("authenticate") 
    public String authenticate(MapModel model) {} 
} 

Así/usuario/login -> método de inicio de sesión,/usuario/cierre de sesión -> cierre de sesión, etc. Me gustaría hacerlo de modo que si alguien va a/usuario entonces rutas a uno de estos métodos. Sin embargo, no veo nada en @RequestMapping que me permita especificar uno de estos métodos como controlador predeterminado. Tampoco veo ninguna otra anotación que pueda usarse en la clase para hacer esto. Estoy empezando a sospechar que no existe.

Estoy usando Spring 2.5.6. ¿Esto está resuelto en 3.0.0? Podría piratear a Spring para que funcione, porque es tremendamente molesto que esto no sea más sencillo.

Gracias de antemano.

+0

+1 ¡Gracias por la maravillosa pregunta! –

Respuesta

12

Echa un vistazo a esta respuesta:

Spring MVC and annotated controllers issue

Qué pasa si usted anotar un método con:

@RequestMapping(method = RequestMethod.GET) 

Se puede ver un ejemplo aquí:

Spring 3.0 MVC + Hibernate : Simplified with Annotations – Tutorial

El mismo comportamiento se puede ver n aquí:

Spring Framework 3.0 MVC by Aaron Schram (ver página 21)

+3

Anotando con @RequestMapping (method = RequestMethod.GET) en un método funcionó. Gracias. Sin embargo, el primer enlace no era el mismo problema y no era aplicable. Los otros enlaces fueron más útiles. – chubbsondubs

5

Respuesta corta: no sé cómo especificar simplemente un método por defecto con una simple etiqueta.

Pero no es esto ...

no sé en qué versión de Primavera de este se llevó a cabo, pero puede proporcionar múltiples value s a @RequestMapping en 3.1.2. Así que hago esto:

@Controller 
@RequestMapping("/user") 
public class UserController { 

    @RequestMapping(value = {"", "/", "/list"}, method = RequestMethod.GET) 
    public String listUsers(ModelMap model) { } 

    @RequestMapping(value = "/add", method = RequestMethod.POST) 
    public ModelAndView add(HttpServletRequest request, ModelMap model) { } 

} 

Los siguientes URL a continuación, asignar a listUsers():

0

me gustaría crear un método por defecto y sin valor de RequestMapping ahí. Por favor, consulte el método defaultCall() a continuación. A continuación, puede simplemente llamar a la URL: [yourhostname]/usuario

@Controller 
@RequestMapping("/user") 
public class UserController { 

    @RequestMapping(method = RequestMethod.GET) 
    public String defaultCall(MapModel model) { 
     //Call the default method directly, or use the 'forward' String. Example: 
     return authenticate(model); 
    } 

    @RequestMapping("login") 
    public String login(MapModel model) {} 

    @RequestMapping("logout") 
    public String logout(MapModel model) {} 

    @RequestMapping("authenticate") 
    public String authenticate(MapModel model) {} 
} 

Ref: Spring Framework Request Mapping

0

Simplemente usando @RequestMapping("**") en su método por defecto debería funcionar. Cualquier mapeo más específico aún debe recoger sus solicitudes. Uso este método para configurar métodos predeterminados a veces.Actualmente usando Spring v4.3.8.RELEASE.

Cuestiones relacionadas