springMVC接口版本号管理

2019-05-28  本文已影响0人  Imstillaboy

    要求:

     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

上一篇 下一篇

猜你喜欢

热点阅读