https://github.com/mindhaq/restapi-versioning-spring.git
https://github.com/augusto/restVersioning.git
这两个git项目里提供了4种在springmvc中进行api版本控制的处理方法,你们看怎么样,能否不使用冗余部署的方式。
- /api/v1/xxx 
 controller中的方法注解写法:- 1 
 2
 3
 4
 5- @ResponseBody 
 @RequestMapping(value = "/apiurl/{version}/hello", method = GET, produces = APPLICATION_JSON_VALUE)
 public Hello sayHelloWorldUrl(@PathVariable final ValidVersion version) {
 return new Hello();
 }
- /api/xxx 
 在header中添加”X-API-Version”:”v1”来进行版本请求的区别
 controller中的方法注解写法:- 1 
 2
 3
 4
 5- @ResponseBody 
 @RequestMapping(value = "/apiheader/hello", method = GET, produces = APPLICATION_JSON_VALUE)
 public Hello sayHelloWorldHeader(@RequestHeader("X-API-Version") final ValidVersion version) {
 return new Hello();
 }
- /api/xxx 
 在header中添加Accept: “application/vnd.company.app-v1+json”来进行版本区别
 controller中的方法注解写法:- 1 
 2
 3
 4
 5- @ResponseBody 
 @RequestMapping(
 value = "/apiaccept/hello", method = GET,
 produces = {"application/vnd.company.app-v1+json", "application/vnd.company.app-v2+json"}
 )
- /api/xxx 
 在header中添加Accept: “application/vnd.company.app-v1+json”来进行版本区别
 controller写法:- `
 @Controller
 @VersionedResource(media = “application/vnd.app.resource”)
 public class TestController {- @RequestMapping(value = {“/resource”}, method = RequestMethod.GET) 
 @VersionedResource(from = “1.0”, to = “1.0”)
 @ResponseBody
 public Resource getResource_v1() {- return new Resource("1.0");- } - @RequestMapping(value = {“/resource”}, method = RequestMethod.GET) 
 @VersionedResource(from = “2.0”)
 @ResponseBody
 public Resource getResource_v2_onwards() {- return new Resource("2.0");- } 
 }