Как переключаться между RestControllers в зависимости от значений HTTP-заголовка?
Мы рассматриваем возможность использования поля заголовка для указания версии REST API в нашем приложении весенней загрузки.
Как мы можем сказать 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
2 ответа
Это похоже на работу:
@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.
Да точно: например
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);
}
Здесь вы получаете документацию: добавление пользовательского заголовка