尘世壹俗人 2023-03-31 15:26 采纳率: 85.7%
浏览 42
已结题

Jquery ajax 通过nginx转发接口时受processData和contentType影响后端接收不到数据怎么搞

最近需要写一个前后端分离的demo,但由于本人不是前端开发,所以在写测试页面的时候遇到一个问题想请教一下。

首先整个请求的流程是前端通过nginx转发请求到后端,nginx配置如下

        location /api {
            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
            add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
 
            if ($request_method = 'OPTIONS') {
                return 204;
            }
            proxy_pass http://localhost:96;
        }

但是在一开始前端的测试页面用ajax发请求后端接不到参数!一步步的排查,最终发现是ajax中一旦配置了processDatacontentType这两个配置后端就接收不到参数了。现在问题就很尴尬我的ajax中有文件需要processData=false,有没有前端的大V指点一下。

traditional: true 这个参数已经试过无法解决问题。

  • 写回答

3条回答 默认 最新

  • 尘世壹俗人 2023-04-26 16:54
    关注

    这个问题已经解决,特此记录一下。

    首先ajax请求里面任然使用processData: false,contentType: false即可,因为查了相关资料,首先contentType的默认值是application/x-www-form-urlencoded; charset=UTF-8 ,这个方式不能用来提交文件。当提交文件的时候contentType需要设置成multipart/form-data,但是在实际使用的时候如果你的contentType是multipart/form-data,并且包裹文件的对象是FormData,提交请求以后前段会报415错误,后台的servlet会提示你如下异常

    Content type ‘multipart/form-data;boundary=----WebKitFormBoundaryTz0sivpVO7U0H70m;charset=UTF-8‘
    

    之后就是后端,在后端接受请求参数的时候用了 @RequestBody接收来自前端的一个json对象数据,这个数据里包含了除了文件的其他内容,但是报了如下错误

    java:the request was rejected because no multipart boundary was found
    

    最后查询资料,发现当你上传文件的时候,后台不能接收Json对象,就是说上传@RequestBody是不能共存的。

    所以总结来讲这个问题有两种解决方案,第一种是后端麻烦点,将上传和处理其他数据的Controller分开写,第二种就是前段麻烦一点,将原本用json对象格式传递的数据写成单个的key-value格式,后台接收任然保持用一个对象去接收,但不要用@RequestBody注解了,依靠框架的非Json对象封装能力就行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月26日
  • 已采纳回答 4月26日
  • 创建了问题 3月31日

悬赏问题

  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!