【问题标题】:Spring MVC 3: Is consumes supposed to disambiguate request mappings?Spring MVC 3:消费者是否应该消除请求映射的歧义?
【发布时间】:2012-06-06 19:56:55
【问题描述】:

我在 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-urlencodedconsumes 可能有错误?

编辑 2:我们使用的是 Spring 3.1.1.RELEASE。

【问题讨论】:

  • 是的,我也相信,会看看是否有其他人可以阐明一些问题,然后将其视为 Spring 的一个错误。
  • 我遇到了完全相同的问题。你找到答案了吗?
  • 我找不到这个问题的答案,并认为它一定是一个错误。
  • 我在 Spring 论坛上提出了这个问题:forum.springsource.org/…

标签: spring spring-mvc


【解决方案1】:

这已由 Marten Deinum 在 Spring 论坛 (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"/>

谢谢马丁。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 2011-03-12
    • 2015-08-15
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多