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@Controllers) 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ś?

questionAnswers(2)

yourAnswerToTheQuestion