看了REST风格写测试程序,当PUT和DELETE时报405

出错时的代码
web.xml:
<!--
配置 org.springframework.web.filter.HiddenHttpMethodFilter: 可以把 POST 请求转为 DELETE 或 put 请求
-->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>JSP:
Put
<br/>
<form action="testPut/10" method="post">
<input type="hidden" name="_method" value="PUT"/>
<input type="text" name="putName">
<input type="submit" value="Test Rest Put">
</form>
<br/>
<br/>
Delete
<br/>
<form action="testDelete/2">
<input type="hidden" name="_method" value="delete"/>
<input type="submit" value="Test Rest Delete">
</form>
Controller:@RequestMapping(value="testPut/{putid}", method=RequestMethod.PUT)
public String testPut(@PathVariable int putid,String putName) {
System.out.println("test Rest Put:"+putid);
System.out.println("name:"+putName);
return "pmq";
}视图解析器:<!-- 视图解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" /> <!-- 前缀 -->
<property name="suffix" value=".jsp" /><!-- 后缀 -->
</bean>看了很多解决办法有说在testPut方法前面加上@ResponseBody注解。
加了@ResponseBody注解解决了405的问题但链接的页面内容只有方法返回的字符串

有说是使用因为使用了tomcat8,这是一个bug,使用7或9就不会发生
本文介绍了解决Spring MVC中RESTful PUT和DELETE请求出现405错误的方法。通过配置HiddenHttpMethodFilter及使用@ResponseBody注解,可以实现将POST请求转换为PUT或DELETE请求。
313

被折叠的 条评论
为什么被折叠?



