Spring MVC 3.1 - управление версиями веб-сервисов REST - PullRequest
6 голосов
/ 12 марта 2012

Я бы хотел создать версию моего REST-Webservice, предоставив разные значения заголовка Accept для разных версий (см. http://barelyenough.org/blog/2008/05/versioning-rest-web-services/).

Проблема в том, что это не представляется возможным в Spring MVC 3.

Мой контроллер выглядит следующим образом:

@Controller
@RequestMapping("test")
public class RestController {

@RequestMapping(method = RequestMethod.GET, produces = "application/vnd.example.item-v1+json")
@ResponseBody
public ItemV1 getItem() {
    return new ItemV1();
}

@RequestMapping(method = RequestMethod.GET, produces = "application/vnd.example.item-v2+json")
@ResponseBody
public ItemV2 getItem2() {
    return new ItemV2();
}
}

Когда я пытаюсь получить доступ к одному из этих методов, я получаю исключение:

java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path '/test'

Я что-то упустил илиРазве это невозможно с Spring MVC? Я знаю, что это возможно с JAX-RS ...

1 Ответ

1 голос
/ 24 марта 2012

http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-produces

Это должно быть возможно, если у тебя есть вещи. Как вы указываете заголовок Accept в запросе GET? Вы на 100% уверены, что ваш запрос GET отправляет значение заголовка Accept, которое будет соответствовать только одному или другому типу контента, который вы указали? Если вы отправите заголовок, который соответствует обоим, Spring не будет знать, какой метод обработчика должен обработать запрос.

Возможно, вам понадобится включить запись org.springframework в DEBUG, чтобы увидеть, что происходит, или использовать отладчик точек останова и исходный код Spring, чтобы увидеть, что на самом деле происходит. «Производит» - это относительно новая функция, так что возможно, есть ошибка.

https://jira.springsource.org/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+%3D+SPR+AND+%28summary+%7E+%22mvc+produces%22+OR+description+%7E+%22mvc+produces%22%29+AND+status+%3D+Open

...