Добавление пользовательских RequestCondition в Spring mvc 3.1

У меня есть приложение Spring mvc (3.1.1), и я хочу определить условия, выходящие за рамки того, что доступно в RequestMapping. У меня есть пара вещей, для которых я хочу использовать это.

Во-первых, было бы неплохо, если бы я мог показать другую домашнюю страницу для разных типов пользователей:

<code>@Controller
public class HomepageController {

    @RequestMapping(value = "/")
    @CustomCondition(roles = Guest.class)
    public String guestHome() { /*...*/ }

    @RequestMapping(value = "/")
    @CustomCondition(roles = Admin.class)
    public String adminHome() { /*...*/ }

}
</code>

Во-вторых, я хочу, чтобы приложение функционировало как веб-сайт и как служба REST (например, для мобильных приложений), поэтому я хочу, чтобы веб-сайт имел доступ как к действиям html, так и к json, и разрешил только службе (другому поддомену) Доступ к действиям JSON (какой-то@CustomCondition(web = true) который соответствует только URL сайта)

Может ли это работать для любого из двух видов использования, которые я планирую?

Я нашел очень мало документации о пользовательских условиях, но я нашелодин пример тотреализует пользовательские условия что может быть то, что я хочу, но он использует@Configuration класс вместо конфигурации XML, которую я использую, и я не хочу перемещать все мои определения Spring XML в@Configuration учебный класс.

Могу ли я определить customMethodCondition дляRequestMappingHandlerMapping в XML?

Я пробовал создавать подклассыRequestMappingHandlerMapping и переопределитьgetCustomMethodCondition, чтобы вернуть мой обычайRequestCondition, но это не сработало -getMatchingCondition() в моем состоянии не стрелял.

Любая помощь будет принята с благодарностью!

UPDATE

Я читаю немного больше, и это выглядит какRequestMappingHandlerMapping это новый класс (начиная с версии 3.1).

В моем приложении происходит то, что @Configuration пытается переопределить и, таким образом, переопределитьrequestMappingHandlerMapping бин на самом деле работает, но отображение URL (@RequestMapping методы в@Controllers) кажетсяget processed twiceоднажды подклассомExtendedRequestMappingHandlerMapping и однажды по оригиналуRequestMappingHandlerMapping - сначала с пользовательским условием, а затем снова без него.

Суть в том, что мои пользовательские условия просто игнорируются.

Предполагается, что это продвинутая модель, но IMO должна быть довольно распространенной ...

Комментарии кто-нибудь?

Ответы на вопрос(2)

Ваш ответ на вопрос