我在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
,则这实际上有效,并使其唯一:{{ 1}}。也许headers="content-type=application/x-www-form-urlencoded
存在错误?
编辑2:我们正在使用Spring 3.1.1.RELEASE。
答案 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。