如何在邮递员的同一请求中发送多部分/表单数据和嵌套 json?
Posted
技术标签:
【中文标题】如何在邮递员的同一请求中发送多部分/表单数据和嵌套 json?【英文标题】:How to send multipart/form-data and nested json in the same request in postman? 【发布时间】:2021-10-22 14:13:51 【问题描述】:我有一个 REST api,它获取嵌套 json 的数据,包括多部分文件
在通过邮递员测试 REST api 时遇到问题。
我不完全知道如何发送我需要的各种类型的数据 - multipart/form-data 文件和嵌套的 json。
我在其他项目中分别使用了 REST,但我无法将它们组合到一个请求中。
要使用 multipart/form-data 我必须在 Body 中选择 form-data,然后从 key 字段的下拉列表中选择 File,单击 value 字段上的选择文件按钮并选择我要上传的文件。
要使用嵌套 json,我必须在下拉列表中选择 raw,然后在其右侧选择 json,然后将嵌套 json 添加到正文中。
但是我该如何结合这两种方法呢?
我需要 multipart/form-data 以及同一个请求中的嵌套 json。我如何从邮递员那里发送这些?正如您在屏幕截图中看到的那样,我正在尝试各种方法,但我没有成功。
提前致谢
附:如果重要的话,我使用 java (spring boot) 作为后端。
【问题讨论】:
你试过了吗? github.com/postmanlabs/postman-app-support/issues/… 我为第二个 json 数据 (repairStatus) 创建了一个 json 文件,现在我收到错误 400 Bad Request。 在 intellij 的控制台中我收到错误 字段“repairStatus”上的对象“票证”中的字段错误:拒绝值.....blah ...blah...blah..........找不到匹配的编辑器或转换策略 如果其他人正在寻找解决方案,那么建议的想法都对我不起作用。但是我设法通过将请求分成两部分来解决我的问题。首先我发送多部分文件,在下一个请求中我发送嵌套的 json 部分,它现在工作正常。 【参考方案1】:您的第一种方法是正确的。但是,要传递最复杂的数据,从该位置进行操作将是一场噩梦。如果需要从邮递员传递数据,那么您可以在邮递员中使用预请求脚本。下面是例子:-
对于 pre-req,我保留了一个基本的 js 对象。
试试这个功能。
【讨论】:
我尝试了您的方法,但在邮递员中收到错误消息 "status":400, "error": "Bad Request"。在 intellij 控制台中,错误是字段 'repairStatus' 上的对象 'ticket' 中的字段错误:......blah............blah.......blah......无法从类型 [java.lang.String] 转换为类型 [java.lang.Integer] 的值 '"status":"repaired","remarks":"already repaired","amount":1000';嵌套异常是 java.lang.NumberFormatException:我仔细检查了所有数据类型,它们都是正确的! 你能附上你配置的pre-req值吗?您保留在那里的对象似乎存在一些问题。它应该是正确的形式。 var data = name : 'Manish' , phone: '9383848433', invoice: '', repairStatus: status: 'repaired', remark : 'already repaired', amount: 1000 ; pm.variables.set("someData", JSON.stringify(data)); 试试上面那个。 我使用了您的建议,但仍然遇到相同的错误。如果我使用 pm.variables.set() 定义预请求变量时,我收到错误 Unresolved Variable This variable is not defined in the active collection, environment or globals. 将鼠标悬停在邮差。仅当我使用 pm.environment.set() 时,才能识别变量并在悬停时显示详细信息。这有什么区别吗? ***.png【参考方案2】:我遵循上述答案,它对我有用。
第一步:在预请求脚本中设置json数据值。
var data =
name:"COD Black Ops",
cost:60,
pm.variables.set("somedata",JSON.stringify(data));
第 2 步:设置表单值。 从描述列旁边的 (...) 按钮中启用内容类型选项,以便将 json 字段的值设置为“application/json”。
第三步:处理表单数据的表达代码
const multer = require('multer')
const upload = multer(<options>)
app.post('/stats', upload.single('uploaded_file'), function (req, res)
// req.file is the name of your file in the form above, here 'uploaded_file'
// req.body will hold the text fields, if there were any
console.log(req.file, req.body)
);
【讨论】:
以上是关于如何在邮递员的同一请求中发送多部分/表单数据和嵌套 json?的主要内容,如果未能解决你的问题,请参考以下文章
如何在多部分/表单数据请求中发送对象而不在 Angular 中转换为字符串