2010-07-25 2 views
8

Je ne trouve pas de solution à cela, et ça me rend fou. J'ai @Controller mappé qui répond à plusieurs méthodes en utilisant @RequestMapping. Je voudrais marquer une de ces méthodes par défaut lorsque rien de plus spécifique n'est spécifié. Par exemple:Comment créer une méthode par défaut dans SpringMVC en utilisant des annotations?

@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) {} 
} 

So/utilisateur/login -> méthode de connexion,/user/fermeture de session -> logout, etc. Je voudrais faire en sorte que si quelqu'un va à/utilisateur, il se routes à une de ces méthodes. Cependant, je ne vois rien sur @RequestMapping qui me permettrait de spécifier l'une de ces méthodes en tant que gestionnaire par défaut. Je ne vois pas non plus d'autres annotations qui pourraient être utilisées sur la classe pour le faire. Je commence à soupçonner que ça n'existe pas. Je utilise Spring 2.5.6. Est-ce résolu en 3.0.0? Je pourrais juste bidouiller Spring pour le faire fonctionner parce que c'est énervant énormément ce n'est pas plus simple.

Merci à l'avance.

+0

+1 Merci pour la merveilleuse question! –

Répondre

12

Jetez un oeil à cette réponse:

Spring MVC and annotated controllers issue

Que faire si vous annoter une méthode avec:

@RequestMapping(method = RequestMethod.GET) 

Vous pouvez voir un exemple ici:

Spring 3.0 MVC + Hibernate : Simplified with Annotations – Tutorial

Le même comportement peut être vu n ici:

Spring Framework 3.0 MVC by Aaron Schram (voir à la page 21)

+3

En annotant avec @RequestMapping (method = RequestMethod.GET) sur une méthode qui a fonctionné. Merci. Cependant, le premier lien n'était pas le même problème et n'était pas applicable. Les autres liens étaient plus utiles. – chubbsondubs

5

réponse courte: Je ne sais pas comment spécifier simplement une méthode par défaut avec une étiquette simple.

Mais il y a cette ...

Je ne sais pas dans quelle version de printemps de cette mise en œuvre a été, mais vous pouvez fournir plusieurs value s à @RequestMapping en 3.1.2. Donc, je fais ceci:

@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) { } 

} 

Les URL suivantes carte puis listUsers():

0

Je voudrais créer une méthode par défaut sans valeur RequestMapping là-bas. Veuillez consulter la méthode defaultCall() ci-dessous. Vous pouvez ensuite les appeler simplement avec l'URL: [yourhostname]/user

@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

utilisant simplement @RequestMapping("**") sur votre méthode par défaut devrait fonctionner. Les mappages plus spécifiques doivent toujours récupérer leurs demandes. J'utilise cette méthode pour configurer des méthodes par défaut parfois.Actuellement en utilisant Spring v4.3.8.RELEASE.

Questions connexes