我正在使用Jboss 6.1,Spring 3.2,hibernate验证以及最近启用的CORS支持。请求正在使用GET方法正常工作。如果使用请求方法POST,我希望控制器返回405。但我得到的是http状态码400。我在jboss日志中启用了跟踪,发现spring正在返回一个错误的处理程序。应用程序只有一个接受POST请求方法的控制器,剩下的控制器被定义为只接受GET方法。每当使用POST请求方法为这些控制器(使用GET定义)发出请求时,Spring都试图找到一个处理程序,但它以某种方式将处理程序与POST方法相匹配。感谢你的帮助!Spring返回不正确的处理程序方法
web.xml中与CORS选项支持
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/web-application-context.xml</param-value>
</init-param>
<init-param>
<param-name>dispatchOptionsRequest</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Spring上下文XML文件:
<mvc:annotation-driven validator="localValidatorFactoryBean">
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="objectMapper" ref="customObjectMapper" />
</bean>
</mvc:message-converters>
这是我的卷曲脚本:
curl -i -X POST -H "Content-type:application/json" -d '{"param1":"value1","param2":"value2"}' http://localhost:8080/api/myrequest
卷曲响应:
HTTP/1.1 400错误的请求 服务器:Apache-狼/ 1.1 X-空间网络服务的版本:2.0.0 的Content-Type:text/html的;字符集= UTF-8 的Content-Length :1079 日期:周一,二○一三年十一月一十八日23点十四分11秒GMT 连接:关闭
这是我的控制方法,它使用Hibernate豆validaton 1.1:
@RequestMapping(value = "myrequest", method = GET, produces = TEXT_XML_VALUE)
@ResponseBody
public String getDetails(
@Valid DetailRequest detailRequest, BindingResult results, HttpServletResponse resp) {
...
}