springMVC接口版本号管理

    要求:

     1.每个restful接口有自己的版本号,并且restful接口的requestMapping要相同

     2.保证接口版本号能够向前兼容,比如版本号v2时,如果没有v2的版本接口,可以调用v1的接口。


实现逻辑:

    1.自定义注解apiVersion(int)

    2.实现org.springframework.web.servlet.mvc.condition.RequestCondition接口,并重写相应的方法。

    3.继承org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping类,并重写方法。

    4.重写WebMvcAutoConfiguration中的requestMappingHandlerMapping,将3中自定义的类进行bean覆盖注入Spring 容器。

下面贴入代码:


自定义版本号注解(requestMapping中的变量参数)


版本号管理和匹配逻辑
自定义requestMappingHandlerMapping


覆盖并初始化bean,注入spring容器


类的requestMapping中加入自定义变量
测试代码

控制台查看requestMapping相关输出:

t.c.c.CustomRequestMappingHandlerMapping : Mapped "{[/{version}/web/user/test],methods=[GET],produces=[application/json;charset=UTF-8],custom=[com.yoogurt.taxi.common.condition.ApiVersionCondition@5fd5d6d1]}" onto public com.yoogurt.taxi.common.vo.ResponseObj com.yoogurt.taxi.user.controller.web.UserWebController.testGateway()

2019-05-28 10:12:56.309  INFO 15469 --- [          main] t.c.c.CustomRequestMappingHandlerMapping : Mapped "{[/{version}/web/user/test],methods=[GET],produces=[application/json;charset=UTF-8],custom=[com.yoogurt.taxi.common.condition.ApiVersionCondition@5e643402]}" onto public com.yoogurt.taxi.common.vo.ResponseObj com.yoogurt.taxi.user.controller.web.UserWebController.testGateway2()

请求接口uri:{version}/web/user/test,其中version是正则表达式“v(\\d+)/”。

请求效果:


v0版本号请求无效,因为我们的版本号是向前匹配,并且是从v1开始


v1版本号请求有效,并且请求的是v1对应的接口
v2版本号请求有效,并且请求的是v2对应的接口
v3版本号请求有效,并且请求的是v2对应的接口,因为是向前匹配,查询最近的一个版本接口

分享完毕,如有不当之处请留言或者邮箱:wudy875498@163.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容