我有一个 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 版开始)。
在我的应用程序中发生的情况是,试图覆盖并因此重新定义requestMappingHandlerMappingbean 的 @Configuration 确实有效,但 url 映射( s@RequestMapping中的方法@Controller)似乎被处理了两次,一次由子类处理,ExtendedRequestMappingHandlerMapping一次由原始RequestMappingHandlerMapping--first 处理自定义条件,然后再没有它。
底线是我的自定义条件被简单地忽略了。
这应该是一种高级模式,但 IMO 它应该很常见......
评论有人吗?