我在Spring MVC 3应用程序中有两个请求映射,一个使用jsonxml,另一个使用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...

consumesproduces应该使请求唯一吗?有任何想法吗?

编辑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。

08-06 20:28