版本: 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。