看了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就不会发生