https://www.cnblogs.com/roobtyan/p/9576685.html

原因:

Tomcat处理参数的问题:

1.将请求体中的数据,封装成一个map
    2.request.getParameter("id")就会从这个map中取值
    3.SpringMvc封装POJO对象的时候, 会把POJO中每个属性的值进行request.getParamter();
    4.AJAX发送PUT,DELETE请求引发的PUT,DELETE请求,请求体中的数据,request.getParamter()拿不到
   Tomcat一看是PUT,DELETE就不会封装请求体中的数据为map,只有POST形式的请求才封装请求为map。

解决方案

这个问题有两种解决方案,第一种比较复杂,第二种比较简单,正常我们肯定是使用第二种的,当然并不排除使用第一种方式的场景.

方案一

  • 配置web.xml文件
  • 将POST请求转发为put/delete请求
<!--使用Rest风格的URI-->
<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请求的时候,使用如下的格式:

$.ajax({
url: "${pageContext.request.contextPath}/emp/" + id,
type: "POST",
data: $("#app form").serialize() +"&_method=PUT",
success: function (result) {
alert("操作成功!");
}
});

  

可以看到不同的地方,首先配置HiddenHttpMethodFilter,这个类可以把POST转换成对应的_method=?的?号中的内容,从而实现请求.当然每次写Ajax请求的时候,都需要协商method字段,便于解析.

方案二

方案二就比较简单了.只需要一个简单的web.xml的配置.

<!--配置SpringMVC,把PUT或者DELETE请求转换成POST-->
<filter>
<filter-name>HttpPutFormContentFilter</filter-name>
<filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HttpPutFormContentFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

  

或者

<!-- 解决ajax put delete请求过滤 -->
<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请求而不需要做任何的处理.

$.ajax({
url: "${pageContext.request.contextPath}/emp/" + id,
type: "PUT",
data: $("#app form").serialize(),
success: function (result) {
alert("操作成功!");
}
});

  

spring mvc 坑之PUT,DELETE方法接收不到请求参数的更多相关文章

  1. Spring MVC 跳转页面的方法

    转一个Spring MVC 跳转页面的方法,楼主总结的很全面,留着备用. https://blog.csdn.net/c_royi/article/details/78528758

  2. Spring MVC学习之三:处理方法返回值的可选类型

    http://flyer2010.iteye.com/blog/1294400 ———————————————————————————————————————————————————————————— ...

  3. Spring MVC坑汇总+Stackoverflow巧解答

    1.http://stackoverflow.com/questions/25598406/spring-annotaion-autowired-inside-methods Q: Autowire ...

  4. Spring mvc接受集合类型参数的方法

    public String xxxxx(String xxxx, String xxxxx, @RequestParam("parameterList[]") List<St ...

  5. Spring MVC 学习笔记3 - 利用Default Annotation 模式获取请求,使Controller与View对应,并传值。

    1. WEB-INF/web.xml 这里定义了获取请求后,执行的第一步.抓取请求. <servlet> <servlet-name>appServlet</servle ...

  6. 关于Tomcat服务器接收到的请求参数乱码的问题

    我们在编写的Controller 等服务器端的代码时,接受到的请求参数经常会乱码. 解决:在Tomcat 的安装目录下找到conf 文件夹下的server.xml文件用记事本打开. 找到 <Co ...

  7. Spring MVC的异常统一处理方法

    我们经常需要统一配置项目的异常处理,又希望统一处理异常代码,同时不侵入原有的正常代码.我们可以通过以下三种方式实现统一处理项目的自定义异常. 通过SimpleMappingExceptionResol ...

  8. Spring MVC NoClassDefFoundError 问题的解决方法。

    这种情况在有些项目中出现过,但是不是所有项目都会有这种问题,具体原因不详. 解决方法:如果某个pom的类出现这个异常,首先看看父级POM文件是否有这个dependency,然后再看看启动的网站web ...

  9. Spring Mvc 页面传递数组到后台接收

    1.定义一个简单的类 User.java public class User { private Integer id; private String name; public Integer get ...

随机推荐

  1. 打印机API

    转载 wangkuiyun 发布于2014-03-21 09:45:37 阅读数 4228 收藏 更新于2014-03-21 09:45:38     AbortDoc 取消一份文档的打印AbortP ...

  2. Linux04 目录的相关操作(mkdir、rmdir、rm、cp)

    一.创建目录:mkdir mkdir 目录名 二.删除目录:rmdir / rm rmdir 目录名 rm -r 目录名      每一级子目录都会询问是否删除 rm -rf 目录名     慎用,给 ...

  3. 使用 python 进行微信好友分析

    使用 python 进行微信好友分析 1. 使用到的库 ① wxpy:初始化微信机器人 ② openpyxl:保存微信好友数据为Excel表格 ③ pyecharts:生成可视化的地图 ④ wordc ...

  4. D03-R语言基础学习

    R语言基础学习——D03 20190423内容纲要: 1.导入数据 (1)从键盘输入 (2)从文本文件导入 (3)从excel文件导入 2.用户自定义函数   3.R访问MySQL数据库 (1)安装R ...

  5. jenkins配合dockerfile部署项目

    前言 本节需要对jenkinsfile有点了解,对dockerfile有点了解,对shell有点了解,对docker有点了解 执行流程 jenkins拉取代码仓库中的代码 jenkins执行jenki ...

  6. web API .net - .net core 对比学习-使用Swagger

    根据前两篇的介绍,我们知道.net web api 和 .net core web api在配置方面的不同如下: 1. .net web api的配置是在 App_Stat文件夹里面添加对应的配置类, ...

  7. java 单链表反转

    最近与人瞎聊,聊到各大厂的面试题,其中有一个就是用java实现单链表反转.闲来无事,决定就这个问题进行一番尝试. 1.准备链表 准备一个由DataNode组成的单向链表,DataNode如下: pub ...

  8. H3C S3600V2 通过CONSOLE配置端口镜像

    前24口为百兆口 对应序号为 Ethernet 1/0/(0~24) 25 26为千兆口 对应序号为 GigabitEthernet 1/0/(25~26) 以下是通过25号千兆口监听1号百兆口的例子 ...

  9. Flutter 与 Android 的交互

    https://juejin.im/post/5cd91de4518825686b120921 https://juejin.im/entry/5b64292be51d451995676398

  10. cgal的安装、编译

    1.下载地址 https://www.cgal.org/2019/03/29/cgal414/ https://github.com/CGAL/cgal/releases/tag/releases%2 ...