要求:
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相关输出:
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+)/”。
请求效果:
分享完毕,如有不当之处请留言或者邮箱:wudy875498@163.com