使用Spring MVC来为我的Web应用程序实现RESTful服务时,我遇到了一个疏远的问题。在执行GET请求时,一切似乎都可以正常工作,但是,我在执行POST请求时要处理的行为使我感到困惑。好吧,我已经实现了这个非常基本的控制器代码:
@Controller
@RequestMapping("/services")
public class RestService {
@RequestMapping(value = "/test/post", method = RequestMethod.POST)
public void postTest(@RequestBody String postString)
throws PersistenceException {
System.out.println(postString);
}
}
当我使用Curl对它执行POST请求时:
curl --data "Hello world" http://localhost:8080/SpringMVC-REST/services/test/post
第一次正确访问我的控制器并显示字符串。但是,不知道为什么,在Spring MVC中的servlet被再次调用后,在这种情况下,有一个错误的URL请求。该框架显然找不到匹配的服务案例:
2014年6月2日下午4:06:21 org.springframework.web.servlet.DispatcherServlet noHandlerFound警告:在DispatcherServlet中,名称为URI [/ SpringMVC-REST / services / test / services / test / post]的HTTP请求未找到映射'mvc-dispatcher'
在第一种和第二种情况下,调试器的堆栈似乎略有不同:
似乎第二次Spring MVC框架试图渲染输出,即使我对此不感兴趣,因为我没有通过Web UI访问它。我使用的servlet配置是标准配置:
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Spring MVC REST</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
Tomcat 6和Tomcat 7和spring-web 3.2.8.RELEASE发生在我身上。有人可以在这里看到问题吗?
@ResponseBody
在方法返回类型之前使用..它应该可以解决您的问题。
所以应该像
@Controller
@RequestMapping("/services")
public class RestService {
@RequestMapping(value = "/test/post", method = RequestMethod.POST)
public @ResponseBody void postTest(@RequestBody String postString)
throws PersistenceException {
System.out.println(postString);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句