Dodawanie niestandardowych warunków żądania w Spring mvc 3.1
Mam aplikację Spring mvc (3.1.1) i chcę zdefiniować warunki wykraczające poza to, co jest dostępne w RequestMapping. Mam kilka rzeczy, z których chcę korzystać.
Po pierwsze, byłoby miło, gdybym mógł wyświetlić inną stronę główną dla różnych typów użytkowników:
<code>@Controller public class HomepageController { @RequestMapping(value = "/") @CustomCondition(roles = Guest.class) public String guestHome() { /*...*/ } @RequestMapping(value = "/") @CustomCondition(roles = Admin.class) public String adminHome() { /*...*/ } } </code>
Po drugie, chcę, aby aplikacja działała zarówno jako strona internetowa, jak i usługa REST (np. Dla aplikacji mobilnych), więc chciałbym pozwolić stronie uzyskać dostęp zarówno do akcji html, jak i json, i pozwolić tylko tej usłudze (innej poddomenie) dostęp do akcji json (pewnego rodzaju@CustomCondition(web = true)
pasujące tylko do adresów URL witryn)
Czy może to działać dla każdego z dwóch zastosowań, które planuję?
Znalazłem bardzo mało dokumentacji na temat warunków niestandardowych, ale znalazłemjeden przykład żewdraża niestandardowe warunki co może być tym, czego chcę, ale używa@Configuration
klasa zamiast konfiguracji XML, której używam i nie chcę przenosić całych moich wiosennych definicji xml na@Configuration
klasa.
Czy mogę zdefiniować warunek niestandardowy dlaRequestMappingHandlerMapping
w XML?
Próbowałem podklasyRequestMappingHandlerMapping
i nadpisaćgetCustomMethodCondition
, aby zwrócić mój zwyczajRequestCondition
, ale to nie zadziałało -getMatchingCondition()
w moim stanie nie strzelił.
Każda pomoc byłaby bardzo mile widziana!
AKTUALIZACJA
Czytam trochę więcej i wygląda na toRequestMappingHandlerMapping
to nowa klasa (od wersji 3.1).
To, co dzieje się w mojej aplikacji, to @Configuration, która próbuje nadpisać i tym samym przedefiniowaćrequestMappingHandlerMapping
fasola faktycznie działa, ale mapowanie adresu URL (@RequestMapping
metody w@Controller
s) wydaje sięprzetwarzane dwa razy, raz przez podklasęExtendedRequestMappingHandlerMapping
i raz przez oryginałRequestMappingHandlerMapping
- najpierw z niestandardowym warunkiem, a następnie bez niego.
Dolna linia to moje niestandardowe warunki są po prostu ignorowane.
To ma być zaawansowany wzór, ale IMO powinno być dość powszechne ...
Komentuje ktoś?