apiKit路由器Mule4后多部分/表单数据中断
请求通过Mule4应用程序中的ApiKit路由器后,从多部分/表单数据读取数据时出现问题 有一个RAML,在ApiKit路由器中用于验证和路由请求apiKit路由器Mule4后多部分/表单数据中断,mule,dataweave,anypoint-studio,mule4,apikit,Mule,Dataweave,Anypoint Studio,Mule4,Apikit,请求通过Mule4应用程序中的ApiKit路由器后,从多部分/表单数据读取数据时出现问题 有一个RAML,在ApiKit路由器中用于验证和路由请求 #%RAML 1.0 title: ACC race data API description: API for designing and updating race data version: 1 protocols: [ HTTPS, HTTP ] /acc/reverse/entrylist: description: Used to
#%RAML 1.0
title: ACC race data API
description: API for designing and updating race data
version: 1
protocols: [ HTTPS, HTTP ]
/acc/reverse/entrylist:
description: Used to manipulate entrylist for ACC reverse grid.
post:
description: Creates new entrylist based on supplied quali result, race one result and race one entrylist.
queryParameters:
positionsRotated:
description: Parameter defining how many positions to rotate.
required: false
type: number
example: 30
body:
multipart/form-data:
properties:
qualifyResult:
description: File containing qualifying result.
type: file
fileTypes: ['application/json']
required: true
raceOneResult:
description: File containing race 1 result.
type: file
fileTypes: ['application/json']
required: true
验证工作正常-如果数据以不正确的格式发送,将返回异常。对于格式正确的数据,请求被路由到流post:\acc\reverse\entrylist:multipart\form data:acc race data config
。
在这些步骤之间,有效负载格式(由Mule)从可读形式的有效负载(见下文)更改为java.io。ByteArrayInputStream@379ebdd5
ApiKit路由器前有效负载数据(接收到应用程序)的可读格式:
----------------------------180928595588258919887097
Content-Disposition: form-data; name="qualifyResult"; filename="json1.json"
Content-Type: application/json
{
"json1": "1"
}
----------------------------180928595588258919887097
Content-Disposition: form-data; name="raceOneResult"; filename="json2.json"
Content-Type: application/json
{
"json2": "2"
}
----------------------------180928595588258919887097--
如果在apiKit之前使用,则以下dataweave脚本可以正常工作,但在apiKit调用的流中不起作用:
%dw 2.0
output application/json
---
payload.parts[1].content
如果在ApiKit之前使用上述DW,则输出示例如下:
{
"json2": "2"
}
org.mule.runtime.core.api.expression.ExpressionRuntimeException: "javax.mail.internet.ParseException - Missing start boundary, while reading `payload` as MultiPart.
Trace:
at main (Unknown)" evaluating expression: "%dw 2.0
output application/json
---
payload.parts[1].content".
如果在ApiKit之后使用相同的DW,则输出示例如下:
{
"json2": "2"
}
org.mule.runtime.core.api.expression.ExpressionRuntimeException: "javax.mail.internet.ParseException - Missing start boundary, while reading `payload` as MultiPart.
Trace:
at main (Unknown)" evaluating expression: "%dw 2.0
output application/json
---
payload.parts[1].content".
在Anypoint Studio 7.8.0中进行测试,应该在完成并准备部署后在Mule4 CE运行时上使用。
使用Postman v8.5.1进行测试。发送包含qualifyResult和raceOneResult部分的表单数据体,其中包含JSON数据、默认标题、基本身份验证、查询参数positionsRotated=30
。
调用的Url:https://localhost:443/api/acc/reverse/entrylist?positionsRotated=30
尝试使用原始类型的有效负载手动生成多部分/表单数据体,但结果相同。如果没有ApiKit,一切正常。。但是我想用它来验证请求的有效性
感谢所有回复有用提示的人 我用最新版本测试了一个类似的场景,我没有这个问题。如果您使用的是较旧版本的HTTP连接器和APIKit模块,请尝试升级到最新版本。Anypoint Studio有一个检测连接器更新版本的功能:我正在接收multipart并尝试读取这两个文件以生成json.Sorry。这个问题我不清楚。应用程序使用什么版本的APIKit和HTTP连接器?Np,APIKit模块版本为1.3.6,HTTP连接器版本为1.5.6。将APIKit版本更新为1.5.1有助于解决此问题。谢谢你的提示!请根据此建议创建一个答案,这样我就可以给你一张绿色支票来给你评分。有道理,我的最新版本测试成功了。我已经更新了这个答案。