【问题标题】:Postman: POST request of nested JSON via form-data not working (while via raw-data ok)邮递员:通过表单数据的嵌套 JSON 的 POST 请求不起作用(而通过原始数据可以)
【发布时间】:2021-11-17 00:17:45
【问题描述】:

我想通过 Postman 发布以下 JSON 对象:

{
    "title": "test_title",
    "date": "2021-12-31",
    "attachments": [
        {
            "name": "test_attachment"
        }
    ]
}

当使用 Postman 的原始输入表单作为请求正文时,这非常有效:我收到“201 Created”响应。

但是,当使用表单数据发布数据时,我收到错误"Invalid data. Expected a dictionary, but got str."(另见下面的屏幕截图)我在这里做错了什么?我尝试了所有其他版本来输入附件键:值对,但到目前为止没有任何效果

【问题讨论】:

    标签: json api postman


    【解决方案1】:

    我成功了! (注意:与有问题的屏幕截图相比,我添加了一些额外的字段。有关详细信息,请参见下文:

    【讨论】:

      【解决方案2】:

      你没有做错任何事。

      • 如果您想使用 json 对象发出请求,那么您可以在 postman 中使用 raw type (json)。
      • 如果要上传文件,请使用form-data
      • 还有一件事,状态 201 表示请求成功,您的对象已创建。

      【讨论】:

      • 但是如果我理解正确的话,我不能使用form-data 来发布嵌套的 JSON 对象,就像我在上面的问题中提到的那样?
      • 视情况而定,但在这种情况下,请使用raw type,而不是form-data
      【解决方案3】:
      var express = require('express')
      
      const multer  = require('multer')
      const upload = multer()
      var app = express()
      
      app.use(express.json());
      
      app.post('/test',upload.none(), function (req, res, next) {
       res.send(req.body)
      })
      
      app.listen(80, function () {
        console.log('web server listening on port 80')
      })
      

      上面是一个使用 form-data 和 json 的示例端点,只需使用表单数据和原始 json 发布到 http://localhost:80/test

      你可以看到两者都会被正确解析

      API只是抽象,它就像一个函数,包含许多属性,你如何解析它取决于实现(api函数是如何编写的)。

      所以答案是“与开发人员交谈”,了解 API 是如何实现的以及它支持什么

      【讨论】:

        猜你喜欢
        • 2021-09-21
        • 2018-12-20
        • 1970-01-01
        • 1970-01-01
        • 2018-07-21
        • 1970-01-01
        • 2018-12-31
        • 2016-12-24
        • 1970-01-01
        相关资源
        最近更新 更多