我遇到了关于在 API 管理策略中使用液体为“Soap to Rest”api 端点映射值的问题。
我的示例看起来像这样......
Soap 请求应返回如下内容:
<Response>
<Truck>
<ID>098NJ2139UND324<ID>
<LicenceNumber>MKL025</LicenceNumber>
<Cargo>
<CargoLicenceNumber>BHJ897</CargoLicenceNumber>
<Cargo>Candy</Cargo>
</Cargo>
<Cargo>
<CargoLicenceNumber>TGA916</CargoLicenceNumber>
<Cargo>Fireworks</Cargo>
</Cargo>
</Truck>
</Response>
我在 API 管理的“out”策略中的 Liquid 代码示例如下所示:
{
"Response": {
"id": "{{body.envelope.body.Response.ID}}",
"licencenumber": "{{body.envelope.body.Response.LicenceNumber}}",
"cargo": [
{% JSONArrayFor item in body.envelope.body.Response where Cargo -%}
{
"cargolicencenumber": "{{item.CargoLicenceNumber}}",
"cargo": "{{item.Cargo}}"
}
{% endJSONArrayFor -%}
]
}
}
但是转换成 Json 的 XML 看起来像这样:
{
"Response":{
"ID": "098NJ2139UND324",
"LicenceNumber": "MKL025",
"Cargo": [{
"CargoLicenceNumber": "BHJ897",
"Cargo":""
},
{
"CargoLicenceNumber": "TGA916",
"Cargo":""
}
]
}
}
我在数组中缺少这个“货物”值。我知道设置有点笨拙,因为我认为数组对象“货物”的名称应该是“拖车”或类似的名称(注意:这是一个示例,而不是我正在使用的真实对象)。与数组子元素同名的数组是我认为导致问题的原因。
由于我不是 SOAP WSDL 的所有者,我曾经将其导入 API 管理以转换为其他 API,因此我无法轻松更改服务中数组的名称。我想知道是否有办法强制液体在数组中找到元素的值?
另外,值得一提的是:当我对代码进行故障排除时,我将“{{item.Cargo}}”部分更改为“{{item.CargoLicenceNumber}}”,并且发现车牌号没有任何问题。所以我在想后端的某些东西肯定会被属性的名称弄糊涂。
以前有没有其他人遇到过这个问题?
提前致谢。