Spring MVC поддерживает управление версиями API через выделенные MediaTypes, например, application/vnd.acme.user-v1+json
и application/vnd.acme.user-v2+json
. Это, однако, имеет проблему, если вы хотите использовать JSON Patch , который имеет фиксированный MediaType application/json-patch+json
. Одним из решений было бы использование параметров MediaType ( пример ), например, application/json-patch+json;version=2
, чтобы указать версию для фактического объекта.
Похоже, Spring не поддерживает это из коробки. Когда я определяю:
@PatchMapping(consumes = "application/json-patch+json", produces = MediaType.APPLICATION_JSON_VALUE)
public User patchUser(@RequestBody JsonNode patch) { }
@PatchMapping(consumes = "application/json-patch+json;version=2", produces = MediaType.APPLICATION_JSON_VALUE)
public User patchUserV2(@RequestBody JsonNode patch) { }
Он всегда использует patchUserV2
, независимо от заданного Content-Type
, являющегося application/json-patch+json
или application/json-patch+json;version=1
.
Когда я также устанавливаю версию для первогоМетод
@PatchMapping(consumes = "application/json-patch+json;version=1", produces = MediaType.APPLICATION_JSON_VALUE)
public User patchUser(@RequestBody JsonNode patch) { }
@PatchMapping(consumes = "application/json-patch+json;version=2", produces = MediaType.APPLICATION_JSON_VALUE)
public User patchUserV2(@RequestBody JsonNode patch) { }
не работает с java.lang.IllegalStateException: Ambiguous handler methods mapped for '/users'
Так что мой вопрос будет, возможно ли это с Spring MVC?