Управление версиями Spring MVC API через MediaType с версией параметра - PullRequest
0 голосов
/ 15 октября 2019

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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...