2010-07-25 16 views
8

Non riesco a trovare una soluzione a questo, e mi sta facendo impazzire. Ho mappato @Controller che risponde a diversi metodi usando @RequestMapping. Vorrei taggare uno di questi metodi come predefinito quando non è specificato nulla di più specifico. Per esempio:Come creare un metodo predefinito in SpringMVC usando le annotazioni?

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

Quindi/user/login -> metodo di login,// ​​logout -> logout, ecc mi piacerebbe fare in modo che se qualcuno va a/utente allora percorsi a uno di questi metodi. Tuttavia, non vedo nulla su @RequestMapping che mi consenta di specificare uno di questi metodi come gestore predefinito. Non vedo nemmeno altre annotazioni che potrebbero essere usate sulla classe per farlo. Sto iniziando a sospettare che non esista.

Sto usando Spring 2.5.6. È risolto in 3.0.0? Potrei semplicemente hackerare Spring per farlo funzionare perché è tremendamente fastidioso che non è più semplice.

Grazie in anticipo.

+0

+1 Grazie per la meravigliosa domanda! –

risposta

12

Date un'occhiata a questa risposta:

Spring MVC and annotated controllers issue

Che cosa succede se si annota un metodo con:

@RequestMapping(method = RequestMethod.GET) 

È possibile vedere un esempio qui:

Spring 3.0 MVC + Hibernate : Simplified with Annotations – Tutorial

Lo stesso comportamento può essere visto n qui:

Spring Framework 3.0 MVC by Aaron Schram (un'occhiata alla pagina 21)

+3

Annotando con @RequestMapping (metodo = RequestMethod.GET) su un metodo ha funzionato. Grazie. Tuttavia, il primo collegamento non era lo stesso problema e non era applicabile. Gli altri collegamenti erano più utili. – chubbsondubs

5

Risposta breve: non so come specificare semplicemente un metodo di default con un semplice tag.

Ma non è questo ...

non so in quale versione di primavera questo è stato realizzato, ma è in grado di fornire molteplici value s per @RequestMapping in 3.1.2. Così faccio questo:

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

} 

i seguenti URL poi mappare listUsers():

0

vorrei creare un metodo di default senza valore di RequestMapping lì dentro. Vedere il metodo defaultCall() di seguito. Si può poi semplicemente li chiamano con l'URL: [yourhostname]/utente

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

Rif: Spring Framework Request Mapping

0

Semplicemente usando @RequestMapping("**") sul tuo metodo di default dovrebbe funzionare. Eventuali mappature più specifiche dovrebbero comunque raccogliere le loro richieste. Io uso questo metodo per impostare i metodi predefiniti a volte.Attualmente usando Spring v4.3.8.RELEASE.

Problemi correlati