您的位置:首页 > 理论基础 > 计算机网络

SpringMVC: HTTP Status 405 - JSPs only permit GET POST or HEAD问题的解决办法。

2016-06-05 00:43 676 查看
版本: spring 4.2.6 Tomcat8

1.出错时的代码

web.xml:

<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:

<form action="springmvc/testRest/1" method="post">
<input type="hidden" name="_method" value="PUT" />
<input type="submit" value="Test Rest PUT"/>
</form>


Controller:

@RequestMapping("/springmvc")
@Controller
public class SpringMVCTest {
private static final String SUCCESS = "success";
@RequestMapping(value="/testRest/{id}",
method=RequestMethod.PUT)
public String testRestPUT(@PathVariable(value="id")
Integer id) {
System.out.println("testRest PUT:  " +  id);
return SUCCESS;
}
}


视图解析器:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>


2.出错的原因

发起的请求是个RESTFul风格的请求,调用了RESTFul风格的PUT方法。但是controller里testRestPUT返回的success字符串被映射到success.jsp。因此spring认为这应该是个JSP接口,且JSP接口仅仅支持GET方法和POST方法。所以系统提示提示了这个错误。

3.解决方法

为controller里的testRestPUT方法加上@ResponseBody()注解,并且返回一个字符串。关键代码如下:

@RequestMapping(value="/testRest/{id}", method=RequestMethod.PUT)
@ResponseBody()
public String testRestPUT(@PathVariable(value="id")
Integer id) {
System.out.println("testRest PUT:  " +  id);
return "abc";
}


系统会返回字符串abc。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: