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

时间:2012-05-03 09:55:12

标签: spring spring-mvc

我在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,则这实际上有效,并使其唯一:{{ 1}}。也许headers="content-type=application/x-www-form-urlencoded存在错误?

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

1 个答案:

答案 0 :(得分:2)

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。