Spring @RequestMapping标头OR而不是AND?

时间:2018-01-18 17:00:06

标签: spring spring-mvc

我的项目包含多种类型的网站,例如博客,论坛和网站。

我有博客,论坛和网站的特定控制器(以及更多)

我希望在站点类型之间共享某些控制器,例如登录控制器。

但我只希望登录控制器与论坛和网站共享。

我使用过滤器添加请求标头“partType”,其中包含有价值的网站,论坛或博客。

我的登录控制器的@RequestMapping是:

@RequestMapping(value="/dash/login",  headers={"partType=forum","partType=site" })

这导致映射:

{[/dash/login/dologin],methods=[GET || POST],headers=[partType=forum && partType=site]}

注意&& (和)。是否有可能获得|| (或)在这里?

因为“partType”标题从不是论坛和网站,但我确实希望logincontroller支持partType论坛和网站,但不支持博客,所以我不能只从请求图标注释中删除标题属性。 / p>

2 个答案:

答案 0 :(得分:3)

这肯定是春天mvc内部运作的旅程。我正在浏览RequestMappingHandlerMapping的源代码时注意到createRequestMappingInfo在控制器上查找了RequestCondition

进一步了解RequestCondition事情,我注意到默认RequestMappingHandlerMapping对此无效。在线搜索为什么忽略RequestCondition我发现这篇文章: How to implement @RequestMapping custom properties

第一个答案给出了RequestCondition和扩展RequestMappingHandlerMapping的示例。但延长RequestMappingHandlerMapping意味着没有<mvc:annotation-driven />

我使用BeanPostProcessor搞砸了并使用自定义RequestMappingHandlerMapping,但是在RequestMappingHandlerMapping的现有实例周围编写包装是不可能的。

幸运我回到上面的网址并阅读链接到帖子的评论: Howto get rid of <mvc:annotation-driven />? 这个解释了如何用自定义xml替换<mvc:annotation-driven />做同样的事情,但允许设置RequestMappingHandlerMapping

经过一番摆弄之后,它现在有效了!

答案 1 :(得分:0)

尝试使用 headers = [&#34; partType = forum,site&#34;] ,它可能会有效。 它在您设置 content-type = application / json,application / xml

时有效