我在Spring MVC 3应用程序中有两个请求映射,一个使用json
和xml
,另一个使用application/x-www-form-urlencoded
数据。例:
@RequestMapping(value={"/v1/foos"}, method = RequestMethod.POST, consumes={"application/json", "application/xml"})
public FooDTO createFoo(@RequestBody FooDTO requestDTO) throws Exception {
...
}
@RequestMapping(value={"/v1/foos"}, method = RequestMethod.POST, consumes="application/x-www-form-urlencoded")
public FooDTO createFooWithForm(@ModelAttribute FooDTO requestDTO) throws Exception {
...
}
我希望使用不同的
consumes
参数使每个请求都是唯一的,尽管我得到的是java.lang.IllegalStateException: Ambiguous handler methods mapped...
。consumes
和produces
应该使请求唯一吗?有任何想法吗?编辑1:要为此增加权重,如果在标题中设置了
content-type
而不是使用consumes
,则实际上可以使它们唯一:headers="content-type=application/x-www-form-urlencoded
。也许consumes
存在错误?编辑2:我们正在使用Spring 3.1.1.RELEASE。
最佳答案
Marten Deinum在春季论坛(here)上已解决此问题:
您应该同时更改HandlerMapping和
HandlerAdapter(使用RequestMappingHandlerAdapter)。
从理论上讲,如果不能随意注册问题,它应该可以工作。
解决此问题的方法是在我的servlet配置中使用正确的HandlerMapping和HandlerAdapter:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
谢谢Marten。