在启动时修改@RequestMappings

时间:2016-05-20 04:56:08

标签: spring spring-mvc

是否可以在启动时更改@RequestMapping值?

基本上我想要的是创建一个注释@Api(Api.Version.V1),这意味着请求映射应该从/api/dogs修改为/api/v1/dogs。我想在类级别(适用于所有)和方法级别(从早期版本重新使用控制器并修改它)中执行此操作。

我可以对此进行硬编码,但这会留下很多字符串来处理,而且它并不像我想要的那么干净。

是否有可能(使用bpp或类似的东西)在启动期间更改请求映射?在创建bean之后,我不想/需要修改它们。

我一直在研究RequestCondition,但这似乎有一种更具活力的性质,我不确定在这种情况下它会对我有所帮助。

另一个问题,我希望能够使用相同的请求映射注释两个类(然后让注释重写它),并且我非常确定这需要在初始上下文加载时完成(所以我们不要重复映射等。)

任何指向正确方向的人都会受到赞赏。

修改

这几乎正常工作,我使用自定义RequestMappingHandlerMapping并重写方法getMappingForMethod,这允许我获取注释(在类型和方法上)并返回修改后的{ {1}}添加了路径。

即使我删除了所有旧映射并且仅返回RequestMappingInfo旧映射到/api/v1/dogs仍然有效,一个问题仍然存在。是否有可能以某种方式删除此映射?

代码在这里,如果有人有兴趣的话。

/api/dogs

1 个答案:

答案 0 :(得分:1)

您可以通过实施HandlerMapping接口或扩展AbstractUrlHandlerMapping来动态添加requestMappings。

这个想法是创建自己的自定义处理程序映射,而不是使用SimpleUrlHandlerMapping,DefaultAnnotationHandlerMapping等默认实现