我的项目包含多种类型的网站,例如博客,论坛和网站。
我有博客,论坛和网站的特定控制器(以及更多)
我希望在站点类型之间共享某些控制器,例如登录控制器。
但我只希望登录控制器与论坛和网站共享。
我使用过滤器添加请求标头“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>
答案 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
时有效