4

我在 Spring MVC 3 应用程序中有两个请求映射,一个接受jsonand 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。

4

1 回答 1

2

Marten Deinum 在 Spring 论坛(这里)上解决了这个问题:

您应该同时更改 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"/>

谢谢马丁。

于 2012-06-06T11:56:55.433 回答