今日项目bug及解决思路

今天我负责维护的预约系统项目出现了bug

bug 描述:用户点击取消预约 直接跳转到login页面
期望表现:弹出取消成功的提示框。
bug定位: 先考虑是否是代码问题,再考虑是否是技术栈老旧问题,最后考虑校园网的服务器权限问题。

思路:首先本地测试取消预约的 /request/{requestId}接口,发现本地运行可以得到正确结果。

然后查看服务器部署的tomcat和spring版本是否和过于老旧,从而可能有版本更新的问题,发现版本spring4.5 /稳定 tomcat8.5 /稳定

最后发现tomcat的原因
当前端向接口发送请求时,

  • 1.controller会将请求体中的数据,封装成一个map
  • 2.request.getParameter("requestId")就会从这个map中取值
  • 3.SpringMvc封装POJO对象的时候,会把POJO中每个属性的值进行request.getParamter();

当AJAX发送delete请求时,请求体中的数据,request.getParamter()拿不到。
因为Tomcat一看是delete就不会封装请求体中的数据为map,只有POST形式的请求才封装请求为map

所以解决办法:
发送GET、POST请求只需要设置 type 参数值为对应的 'get'、'post'即可。
发送DELETE、PUT请求时
先需要在web.xml配置文件中添加一个将post请求转换为delete或put请求的filter,注意web.xml是项目WEB-INF文件夹里的,不是tomcat里conf里的web.xml。代码如下

<!-- 使用Rest风格的URI 将页面普通的post请求转为指定的delete或者put请求-->
        <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>

前端$.ajax({})中设置type参数值为 post,然后在请求参数中加一个参数,参数键是 _method,参数值是 delete或put,代码如下
前端代码
此时后端restful风格的接口即可正常使用啦。

全部评论

相关推荐

1 1 评论
分享
牛客网
牛客企业服务