Spring MVC 3:消耗是否应该消除请求映射的歧义?

我在
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 {
    ...
}

我期望不同的consume参数使每个请求都是唯一的,尽管我得到了一个java.lang.IllegalStateException:映射的模糊处理程序方法….

消费和生产应该使请求独特吗?有任何想法吗?

编辑1:为了增加权重,如果你在标题中设置内容类型而不是使用消费,这实际上有效并使它们成为唯一:headers =“content-type = application / x-www-form-urlencoded.也许消费有一个错误?

编辑2:我们正在使用Spring 3.1.1.RELEASE.

最佳答案 这已由Marten Deinum在春季论坛(
here)上解决:

You should change both the HandlerMapping as well as the
HandlerAdapter (use the RequestMappingHandlerAdapter).

In theory it should work if it doesn’t feel free to register an issue.

这个问题的解决方案是在我的servlet配置中使用正确的HandlerMapping和HandlerAdapter:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

谢谢貂.

点赞