Spring @RequestMapping headers OR 而不是 AND?

标签 spring spring-mvc

我的项目由多种类型的网站组成,例如博客、论坛和网站。

我有博客、论坛和网站(以及更多)的特定 Controller

我希望在不同类型的站点之间共享某些 Controller ,例如登录 Controller 。

但我只想与论坛和网站共享登录 Controller 。

我使用过滤器添加请求 header “partType”,其中包含值网站、论坛或博客。

我的登录 Controller 的 @RequestMapping 是:

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

这会导致映射:

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

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

因为“partType” header 从来都不是论坛和网站,但我确实希望登录 Controller 支持partType论坛和网站,但不支持博客,所以我不能只从请求映射注释中删除 header 属性。

最佳答案

这确实是一次了解 Spring MVC 内部运作的旅程。当我浏览RequestMappingHandlerMapping的源代码时注意到createRequestMappingInfo寻找RequestCondition在 Controller 上。

进一步研究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 />? 这个解释了如何替换 <mvc:annotation-driven />使用自定义 xml 执行相同的操作,但允许设置 RequestMappingHandlerMapping .

经过一番摆弄后,它现在可以工作了!

关于Spring @RequestMapping headers OR 而不是 AND?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48326631/

相关文章:

java - 使用 Spring Boot 构建 Spring MVC 应用程序

java - BeanValidation 错误 - 在类路径上找不到 JSR 303 Bean 验证实现

java - 在提交 spring mvc 上绑定(bind)子对象

java - Bean 属性 'trustStore' 不可写或具有无效的 setter 方法。 setter 的参数类型与 getter 的返回类型是否匹配?

java - Spring:将一条记录添加到列表中突然创建了一条重复项

java - 如何使用免费软件对Java Web应用程序进行连续部署

java - 在@Configuration中注入(inject)合并的bean列表

java - SecurityContextHolder.getContext().getAuthentication() 返回 null

java - org.springframework.web.servlet.PageNotFound noHandlerFound spring

java - 配置失败: @BeforeClass setUp org.mockito.exceptions.base.MockitoException:无法初始化@Spy注释字段 'allRequestParams'