Java 如何根据HTTP头值在RESTController之间切换?

Java 如何根据HTTP头值在RESTController之间切换?,java,spring,rest,spring-boot,api-versioning,Java,Spring,Rest,Spring Boot,Api Versioning,我们正在考虑在spring引导应用程序中使用头字段来指定RESTAPI版本 我们如何让spring boot根据标头值重定向调用 我梦想着这样的事情: @Path("/my/rest/path") @HeaderMapping(headerName="ApiVersion", headerValue="V1") public class V1Controller { @GetMapping public String myMethod() { } } == and =

我们正在考虑在spring引导应用程序中使用头字段来指定RESTAPI版本

我们如何让spring boot根据标头值重定向调用

我梦想着这样的事情:

@Path("/my/rest/path")
@HeaderMapping(headerName="ApiVersion", headerValue="V1")
public class V1Controller {

    @GetMapping
    public String myMethod() {
    }
}

== and ==

@Path("/my/rest/path")
@HeaderMapping(headerName="ApiVersion", headerValue="V2")
public class V2Controller {

    @GetMapping
    public String myMethod() {
    }
}
对于以下HTTP请求:

GET /my/rest/path HTTP/1.1
Accept: application/json
ApiVersion: V1

== or ==

GET /my/rest/path HTTP/1.1
Accept: application/json
ApiVersion: V2
这似乎有效:

@Path("/my/rest/path")
public class V1Controller {

    @GetMapping(headers = "ApiVersion=V1")
    public String myMethod() {
    }
}

== and ==

@Path("/my/rest/path")
public class V2Controller {

    @GetMapping(headers = "ApiVersion=V2")
    public String myMethod() {
    }
}
PS:尚未测试,但可以在中看到。

是的,确切地说: e、 g

您可以在这里获得文档:

PUT method #1
@RequestMapping(method=RequestMethod.PUT, value="/foo", 
headers="returnType=Foo")
public @ResponseBody Foo updateFoo(@RequestBody Foo foo) {
fooService.update(foo);
}

//PUT method #2
@RequestMapping(method=RequestMethod.PUT, value="/foo", 
headers="returnType=FooExtra")
public @ResponseBody FooExtra updateFoo(@RequestBody FooExtra fooExtra) {
fooService.update(fooExtra);
}