2010-07-25 23 views
8

Nie mogę znaleźć rozwiązania tego, a to doprowadza mnie do szału. Mam @Controller zmapowany, który odpowiada na kilka metod przy użyciu @RequestMapping. Chciałbym oznaczyć jedną z tych metod jako domyślną, gdy nie określono nic bardziej konkretnego. Na przykład:Jak utworzyć domyślną metodę w SpringMVC za pomocą adnotacji?

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

Tak/user/login -> metoda logowania/user/logout -> wylogowania, itd. Chciałbym zrobić to tak, że jeśli ktoś jedzie do/user to trasy do jednego tych metod. Jednak nie widzę niczego na @RequestMapping, który pozwoliłby mi określić jedną z tych metod jako domyślną procedurę obsługi. Nie widzę też żadnych innych adnotacji, które mogłyby zostać użyte w klasie. Zaczynam podejrzewać, że to nie istnieje.

Używam Spring 2.5.6. Czy to rozwiązano w wersji 3.0.0? Mogę po prostu włamać się do Springa, żeby to zadziałało, ponieważ jest niesamowicie denerwujące, nie jest to prostsze.

Dzięki z góry.

+0

+1 Dzięki za wspaniałe pytanie! –

Odpowiedz

12

Spójrz na to odpowiedź:

Spring MVC and annotated controllers issue

Co jeśli adnotacje metodę z:

@RequestMapping(method = RequestMethod.GET) 

można zobaczyć przykład tutaj:

Spring 3.0 MVC + Hibernate : Simplified with Annotations – Tutorial

To samo zachowanie można zobaczyć n tutaj:

Spring Framework 3.0 MVC by Aaron Schram (spojrzenie na stronie 21)

+3

Adnotowanie przy użyciu @RequestMapping (method = RequestMethod.GET) na jednej metodzie, która zadziałała. Dzięki. Jednak pierwszy link nie był tym samym problemem i nie miał zastosowania. Pozostałe linki były bardziej pomocne. – chubbsondubs

5

Krótka odpowiedź: nie wiem, jak po prostu określić jedną metodę jako domyślne w prosty tag.

Ale jest to ...

nie wiem w jakiej wersji Wiosna to zostało zrealizowane, ale można podać wiele value s do @RequestMapping w 3.1.2. Więc to zrobić:

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

} 

następujące adresy następnie mapę do listUsers():

0

Chciałbym utworzyć jedną metodę domyślną bez wartości RequestMapping za tam. Zobacz poniżej metodę defaultCall(). Następnie można po prostu zadzwonić do nich z adresem URL: [yourhostname]/użytkownik

@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

prostu za pomocą @RequestMapping("**") na domyślną metodę powinno działać. Wszelkie bardziej szczegółowe odwzorowania powinny nadal odbierać żądania. Używam tej metody do konfigurowania domyślnych metod.Obecnie używa Spring v4.3.8.RELEASE.

Powiązane problemy