让SpringMVC支持REST风格的PUT、DELETE请求的方法

近年来REST风格大行其道!目前在使用REST风格的网站有:github,gitbook,facebook等,国外的目前BAT也在使用。但是最近部分网友反馈,SpringMVC支持REST时,遇到请求参数取值为null的情况。今天我就为大家分享一下如何解决这样的问题?

HTTP的8中请求方式

一些新手,可能只知道http有get和post请求。但我告诉你http一共有8中请求方式,get和post只是最常用的两种吧了。看下面8中请求的方法和作用:

  • GET:请求获取由 Request-URI 所标识的资源
  • POST:请求服务器接收在请求中封装的实体,并将其作为由 Request-Line 中的 Request-URI 所标识的资源的一部分
  • HEAD:请求获取由 Request-URI 所标识的资源的响应消息报头
  • PUT:请求服务器存储一个资源,并用 Request-URI 作为其标识符
  • DELETE:请求服务器删除由 Request-URI 所标识的资源
  • TRACE:请求服务器回送到的请求信息,主要用于测试或诊断
  • CONNECT:保留将来使用
  • OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求

在REST中我们基本上只会用到get、post、put、delete四中请求方式。

SpringMVC处理put、delete请求

在项目实际的开发过程中,我们使用ajax请求put和delete操作。发现controller接收的自定义实体类形参的各个属性都是null。ajax请求如下:

$.ajax({
	url:‘www.xttblog.com’,
	type:‘put’,
	data:{}
});

很多网友得出结论是浏览器不支持,这是一种错误的理解。其实是我们的服务器不支持,一般的Tomcat,JBoss等服务器禁止了put和delete等请求。我们可以使用SpringMVC自带的过滤器HiddenHttpMethodFilter来支持put和delete请求。首先需要在web.xml中配置HiddenHttpMethodFilter,配置如下:

<filter> 
	<filter-name>hiddenHttpMethodFilter</filter-name> 
	<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> 
	<init-param> 
		<param-name>methodParam</param-name> 
		<param-value>requestMethod</param-value> 
	</init-param> 
</filter> 
<filter-mapping> 
	<filter-name>hiddenHttpMethodFilter</filter-name> 
	<url-pattern>/*</url-pattern> 
</filter-mapping>

另外在ajax请求时,在data参数中,还需要做如下配置:

$.ajax({
	url:‘www.xttblog.com’,
	type:‘post’,
	data:{
		 _method:put,
	}
});

Tomcat支持put和delete请求

让Tomcat支持put和delete的做法很简单,我们只需要在tomcat的web.xml文件中配置org.apache.catalina.servlets.DefaultServlet的readonly属性为false即可。具体配置如下:

<servlet>
	<servlet-name>default</servlet-name>
	<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
	<init-param>
		<param-name>debug</param-name>
		<param-value>0</param-value>
	</init-param>
	<init-param>
		<param-name>readonly</param-name>
		<param-value>true</param-value>
	</init-param>
	<init-param>
		<param-name>listings</param-name>
		<param-value>false</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>

这里需要注意的是,web.xml是Tomcat下的web.xml,不是项目中WEB-INF下的web.xml文件。

版权声明:本文为博主原创文章,未经博主允许不得转载。

让SpringMVC支持REST风格的PUT、DELETE请求的方法

: » 让SpringMVC支持REST风格的PUT、DELETE请求的方法

原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/tech/java/251473.html

(0)
上一篇 2022年5月3日 02:01
下一篇 2022年5月3日 02:05

相关推荐

发表回复

登录后才能评论