我有一个 Spring mvc (3.1.1) 应用程序,我想定义超出 RequestMapping 中可用的条件。我有几件事想用它来做。
首先,如果我可以为不同的用户类型显示不同的主页,那就太好了:
@Controller
public class HomepageController {
@RequestMapping(value = "/")
@CustomCondition(roles = Guest.class)
public String guestHome() { /*...*/ }
@RequestMapping(value = "/")
@CustomCondition(roles = Admin.class)
public String adminHome() { /*...*/ }
}
其次,我希望该应用程序既可用作网站又可用作 REST 服务(例如,对于移动应用程序),因此我想让网站同时访问 html 和 json 操作,并仅让服务(不同的子域)访问 json 操作(其中某种@CustomCondition(web = true)
只匹配网站 url)
这可以用于我计划的两种用途中的任何一种吗?
我发现关于自定义条件的文档很少,但我确实找到了一个实现自定义条件的示例,这可能是我想要的,但它使用一个@Configuration
类而不是我正在使用的 XML 配置,我不想移动我的整个spring xml定义到一个@Configuration
类。
我可以RequestMappingHandlerMapping
在 XML 中定义 customMethodCondition 吗?
我尝试了 subclassingRequestMappingHandlerMapping
和 override getCustomMethodCondition
,以返回我的 custom RequestCondition
,但它没有用 -getMatchingCondition()
在我的情况下没有触发。
任何帮助将不胜感激!
更新
我读了更多,它看起来像是RequestMappingHandlerMapping
一个新课程(从 3.1 版开始)。
在我的应用程序中发生的情况是,试图覆盖并因此重新定义requestMappingHandlerMapping
bean 的 @Configuration 确实有效,但 url 映射( s@RequestMapping
中的方法@Controller
)似乎被处理了两次,一次由子类处理,ExtendedRequestMappingHandlerMapping
一次由原始RequestMappingHandlerMapping
--first 处理自定义条件,然后再没有它。
底线是我的自定义条件被简单地忽略了。
这应该是一种高级模式,但 IMO 它应该很常见......
评论有人吗?