如何解决Mule#4:RAML 无法解析转义字符中的 JSON
我在 RAML 1.0 中声明了以下架构
body:
application/json:
type: object
properties:
region:
example:
strict: false
value: NA
type: string
required: true
country:
description: Country name
example:
strict: false
value: US
type: string
required: true
orders:
type: array
items:
properties:
orderName:
example:
strict: false
value: "toys"
type: string
maxLength: 20
required: false
orderNumber:
example:
strict: false
value: order12
type: string
maxLength: 25
required: false
maxItems: 100
required: true
当我发送以下 JSON 请求时
{
"region": "South America","country": "US","orders": [
"{\n \"orderNumber\": \"ORD0118\",\n \"orderName\": \"toys\"\n}","{\n \"orderNumber\": \"ORD0119\",\n \"orderName\": \"pens\"\n}","{\n \"orderNumber\": \"ORD0120\",\n \"orderName\": \"pencils\"\n}"
]
}
当我批量聚合消息并连接有效负载时,有效负载的格式如上所示。 我看到一个错误的请求错误
Position: Line 0,Column 0\n/orders/0 expected type: JSONObject,found: String Location: Position: Line 0,Column 0\n/orders/1 expected type: JSONObject,Column 0\n/orders/2 expected type: JSONObject,Column 0",
请帮助我更新 RAML 以接受转义字符中的 JSON。
解决方法
有效载荷的 orders 属性是一个字符串列表,而不是对象列表,因为数组的成员是“转义”的。根据您打算做什么,您可以更改 RAML 以将数组设置为字符串数组,或者以某种方式将字符串转换为 RAML 期望的对象。
对于前者,将订单的定义替换为:
orders:
type: string[]
如果您想稍后执行以下操作,以下 DataWeave 脚本将转换预期对象中的列表:
%dw 2.0
output application/json
---
{
region: payload.region,country: payload.country,orders: payload.orders map read($,"application/json")
}
输出:
{
"region": "South America","country": "US","orders": [
{
"orderNumber": "ORD0118","orderName": "toys"
},{
"orderNumber": "ORD0119","orderName": "pens"
},{
"orderNumber": "ORD0120","orderName": "pencils"
}
]
}
,
在批处理聚合器中启用保留 MIME 类型解决了这个问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。