Как переключаться между RestControllers в зависимости от значений HTTP-заголовка? - PullRequest
0 голосов
/ 26 июня 2018

Мы рассматриваем возможность использования поля заголовка для указания версии REST API в нашем приложении весенней загрузки.

Как мы можем сказать весенней загрузке перенаправлять вызовы в зависимости от значения заголовка?

Мне снится что-то вроде этого:

@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

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Да точно: например,

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);
}

Здесь вы получаете документацию: добавление пользовательского заголовка

0 голосов
/ 26 июня 2018

Кажется, что это работает:

@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: еще не проверено, но замечено в учебном пособии по загрузке Spring .

...