无论是否可以通过向后兼容的更改来避免版本控制(当你受到某些公司准则的约束或API客户端以错误的方式实现并且即使不这样做时也会中断),这可能总是不可能的,抽象的需求是一个有趣的一:
我该如何做一个自定义请求映射,以对请求中的标头值进行任意评估,而无需在方法主体中进行评估?
如该SO答案所述,你实际上可以具有相同的
@RequestMapping注释,并使用不同的注释来区分运行时发生的实际路由。为此,你将必须:
- 创建一个新的注释
VersionRange
。 - 实施
RequestCondition<VersionRange>
。由于你将拥有最佳匹配算法之类的东西,因此你必须检查用其他VersionRange值注释的方法是否可以为当前请求提供更好的匹配。 VersionRangeRequestMappingHandlerMapping
根据注释和请求条件实现一个(如如何实现@RequestMapping定制属性一文中所述 )。- 配置spring以便
VersionRangeRequestMappingHandlerMapping
在使用默认值之前评估你的行为RequestMappingHandlerMapping
(例如,将其顺序设置为0)。
这不需要对Spring组件进行任何恶意的替换,而是使用Spring配置和扩展机制,因此即使你更新Spring版本(只要新版本支持这些机制),它也可以正常工作。



