我想通过为不同版本提供不同的Accept标头值来对我的REST-Webservice进行版本化(请参阅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可以实现......
答案 0 :(得分:1)
这应该是你有办法的方式。你如何在GET请求中指定Accept标头?您是否100%肯定您的GET请求发送的Accept标头值只会与您指定的一种或另一种内容类型相匹配?如果你发送一个匹配两者的标题,那么Spring将不知道哪个处理程序方法应该处理请求。
您可能需要打开org.springframework日志记录到DEBUG以查看发生了什么,或者使用断点调试器和Spring源代码来查看实际发生的情况。 “产生”是一个相对较新的功能,因此也有可能存在错误。