版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/104464921
最近在重温 Spring MVC 时,发现一个关于 RESTful 的问题,经过上网查询,发现网上大部分解释的都不太好,为此我也来总结记录下。大家若有补充的请及时告我,本人在此表示感谢。
问题描述
当我使用 RESTful 风格的 DELETE 和 PUT 时,会遇 405 错误,但控制台却一切正常。这里我用 PUT 举例,DELETE 相同。代码如下:
1、JSP
<form action="rest/method" method="post">
<input type="hidden" name="_method" value="PUT">
<input type="submit">
</form>
2、Controller
@Controller
@RequestMapping("/rest")
public class IndexController {
@RequestMapping(value = "/method", method=RequestMethod.PUT)
public String put() {
System.out.println("put");
return "test";
}
}
3、配置 HiddenHttpMethodFilter 过滤器
<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>
4、当我使用浏览器访问这个接口时,它会产生 405 错误,而控制台一切正常
1)浏览器
2)控制台
解决方案
对于这个问题网上虽然提供了不少的解决方案,但是不够全面。其实对于 DELETE 和 PUT 早就不推荐使用了,就连 JSP 都很少使用了,所以你会发现在一些老的版本使用起来没有问题。
1、将 Tomcat 换至 7.0 以下版本
这种方式是网上大多数人提供的,本人没有试过,相信一定可以解决的。
2、将转发改为重定向
return "test";
这种方式是转发,而 DELETE 和 PUT 是不支持转发的,只支持重定向,所以只需要将这行代码改为:return "redirect:/test.jsp";
,就完成解决了。。。