开发者社区> 问答> 正文

spring mvc put请求参数全为null 400 请求报错 

已配置HiddenHttpMethodFilter和HttpPutFormContentFilter。现在我用ajax发送请求: …… var formData = new FormData($("#duibaForm")[0]);     formData.append('tokenContent', Cookies.get('token'));               $.ajax({         url : $.fw.url() + 'duiba/activity',         type : 'put',         data : formData,         async : false,         cache : false,         contentType : false,         processData : false,         success : function(data) {         alert(data.message);         if (data.code == 1) {                          var opener = window.opener;             if (opener) {             window.close();             opener.location.reload();             }         }else{             $btn.attr('disabled', false);         }         }     }); ……  浏览器查看发送的数据正常,spring mvc收到的参数全为null。当我把method改为post并添加参数"_method"为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>         <url-pattern>/</url-pattern>     </filter-mapping>     <filter>         <filter-name>HttpMethodFilter</filter-name>         <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>     </filter>     <filter-mapping>         <filter-name>HttpMethodFilter</filter-name>         <url-pattern>/</url-pattern>     </filter-mapping>        紧急求助!!

展开
收起
kun坤 2020-05-30 15:06:16 971 0
1 条回答
写回答
取消 提交回答
  • 你打断点调试一下试试,就是有可能你的数据已经发送过去了,对了,还有可能就是cookie的问题,我之前用cookie也出现 过问题,用一下localstorage试试######和cookie没关系吧,######var formData = new FormData($("#duibaForm")[0]);是什么鬼?能$('#duibaForm').serialize() 否?######回复 @lengmianshi : 可以的,我觉得你可以先确定一下是后端代码或配置的问题,还是前端代码有问题,简单先写个<form action="" method="put" enctype="application/x-www-form-urlencoded">...</form>把数据提交过去看看?如果这样可以提交接收到,那就说明是你的前端代码错了######@Kit_lee 回复 @Kit_lee : 如果我想用put请求上传文件呢?是不是不行?######回复 @lengmianshi : 那试试将你$.ajax中的contentType项去掉看看?如果是HttpPutFormContentFilter的话,form的contentType必须是默认的application/x-www-form-urlencoded,清掉不写的话默认就是这个######回复 @Kit_lee : 就是这样啊,反正进入的是另一个post请求的接口######回复 @lengmianshi : 假设你的浏览器不支持PUT,那么你用HiddenHttpMethodFilter的时候只需要增加参数"_method=put"就好了呀,controller方法应该还是method=RequestMethod.PUT才对,不然怎么进去?######data : formData 修改为 data: JSON.stringify(formData) 试试######回复 @lengmianshi : 后台是否用 JSON 接收都没关系,这个是 POST 发送参数的要求######后台不是用json接受数据的######fromData的问题吧,直接发送一个对象数据过去,会默认进行序列化,如果本身不支持序列化,那么是传输不了的######但我将接口接受的请求方法改为post却能接收数据呢?formData应该是正常的

    2020-05-30 15:06:21
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载

相关实验场景

更多