Arrays API管理策略中的液体映射问题
在api管理策略中,我遇到了一个关于使用liquid为“Soap到Rest”api端点映射值的问题 我的例子看起来像这样 Soap请求应返回如下内容:Arrays API管理策略中的液体映射问题,arrays,liquid,azure-api-management,api-management,xml-to-json,Arrays,Liquid,Azure Api Management,Api Management,Xml To Json,在api管理策略中,我遇到了一个关于使用liquid为“Soap到Rest”api端点映射值的问题 我的例子看起来像这样 Soap请求应返回如下内容: <Response> <Truck> <ID>098NJ2139UND324<ID> <LicenceNumber>MKL025</LicenceNumber> <Cargo> <
<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>
{
"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 -%}
]
}
}
{
"Response":{
"ID": "098NJ2139UND324",
"LicenceNumber": "MKL025",
"Cargo": [{
"CargoLicenceNumber": "BHJ897",
"Cargo":""
},
{
"CargoLicenceNumber": "TGA916",
"Cargo":""
}
]
}
}
但将XML转换为Json的过程如下所示:
<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>
{
"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 -%}
]
}
}
{
"Response":{
"ID": "098NJ2139UND324",
"LicenceNumber": "MKL025",
"Cargo": [{
"CargoLicenceNumber": "BHJ897",
"Cargo":""
},
{
"CargoLicenceNumber": "TGA916",
"Cargo":""
}
]
}
}
我在数组中缺少这个“货物”值。我知道设置有点笨拙,因为我认为数组对象“Cargo”的名称应该是“trail”或类似的名称(注意:这是一个示例,不是我正在使用的真实对象)。我认为与数组子元素同名的数组是导致问题的原因
由于我不是soapwsdl的所有者,所以我无法轻松地更改服务中数组的名称。soapwsdl用于导入到API管理以转换为restapi。我想知道是否有办法强迫液体找到数组中元素的值,如何
另外,值得一提的是:当我对代码进行故障排除时,我将“{item.Cargo}}”部分更改为“{{item.cargoLicenseNumber}}”,并且发现车牌号没有任何问题。所以我在想,后端的某些东西肯定会被财产的名称弄糊涂
以前有没有其他人遇到过这个问题
提前感谢。看来后端无法很好地处理xml属性 根据我的测试,如果我们使用xml-to-json策略,然后使用liquid-template来处理它,后端将能够为您获取子元素“Cargo” 以下是我的保单样本供您参考:
<outbound>
<base />
<xml-to-json kind="direct" apply="always" consider-accept-header="false" />
<set-body template="liquid">
{
"Response": {
"id": "{{body.Response.Truck.ID}}",
"licencenumber": "{{body.Response.Truck.LicenceNumber}}",
"cargo": [
{% JSONArrayFor item in body.Response.Truck.Cargo %}
{
"cargolicencenumber": "{{item.CargoLicenceNumber}}",
"cargo": "{{item.Cargo}}"
}
{% endJSONArrayFor %}
]
}
}
</set-body>
</outbound>
{
“答复”:{
“id”:“{body.Response.Truck.id}”,
“LicenseNumber”:“{{body.Response.Truck.licenseNumber}”,
“货物”:[
{%jsonarrayforbody.Response.Truck.Cargo%中的项目]
{
“CargoLicenseNumber”:“{item.cargoLicenseNumber}”,
“货物”:“{item.cargo}”
}
{%endJSONArrayFor%}
]
}
}
感谢您回答@AllenWu,这在我这方面不起作用。在“set body”之前实现“Xml to Json”元素后,值是不可访问的。@John这对我来说很好。您的Soap响应有一个错误<代码>098NJ2139UND324应修改为098NJ2139UND324
。如果仍然不起作用,请分享您真正的Soap响应和您现在使用的APIM策略。Hello@Allen很抱歉回答得太晚,我所做的只是直接使用“xml到json”转换,然后将策略中的“set body”部分设置为上下文中转换方法返回的body。这返回了我需要的正确json字符串。由于某些原因,在我的“set body”标记中使用“template=liqd”在我的一生中都无法理解如何输入上下文以获取值,相反,它将整个根属性返回为空。我用Soap来休息,所以我认为后面有很多事情会把事情搞得一团糟。另外,我恐怕无法显示我正在使用的数据,因为这些数据与我工作的公司的集成有关。@John,没问题。事实上,我唯一修改的是:{%jsonarrayforitem In body.envelope.body.Response where Cargo-%}
到{%jsonarrayforitem In body.Response.Truck.Cargo%}
。请检查一下。