前几天,由于公司的后台管理系统要搭建restful服务,用来规范api和保持接口的可读性,本以为简简单单就可以搞定的事情,结果花了一下午才搭建好,这里分享一下搭建中遇到的坑。
一。 在进行get和post请求时一切正常,但是在delete请求时,发现客户端报405错误,405是服务器不允许这个方法,报错信息如下:
图一
图二
可以看到这里发送了两个请求,一个options,一个post,这个post请求是delete变得,网上查了下资料,在进行跨域请求的时候,浏览器会自动的发送一个option请求,在接着发送你要发送的请求,解决方案如下:
图三
在Nginx中加上如下配置,但是加上后发现还是不行,这个时候就有点懵逼了,问了下前端的同学,发现在Nginx中少了一个配置,如下所示:
图四
这里只有option,post,get方法,加上put和delete,至此,delete请求发送正常。
二。本以为delete请求都正常发送了,put请求应该也能正常的发送,但是,在测试put请求的时候,出现了拿不到参数的问题,这下有懵逼了,明明delete请求都是好的,为什么put请求会出问题呢?
后来,Google一下发现是springmvc的问题,springmvc会把put请求拦截掉,所以拿不到参数,只要在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>
<servlet-name>ROOT</servlet-name>
</filter-mapping>
至此,问题解决。
网友评论