近年来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请求的方法
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/tech/java/251473.html