List 使用wso2中介器创建响应对象列表
我创建了一个源代码为“Get”的RESTAPI。它在输入中有参数,并通过输入和输出中介将json转换为soap,然后再将soap转换为json以生成输出。 输出是对象列表。如果列表中有多个对象,则其工作正常。但是如果我有一个对象,我期望一个列表包含一个对象作为响应,但是输出只是一个对象。并且省略了列表。 我的调解人有什么问题吗 以下是JsonToSoap中介(在中介中): 一个对象的响应是:List 使用wso2中介器创建响应对象列表,list,wso2,mediator,List,Wso2,Mediator,我创建了一个源代码为“Get”的RESTAPI。它在输入中有参数,并通过输入和输出中介将json转换为soap,然后再将soap转换为json以生成输出。 输出是对象列表。如果列表中有多个对象,则其工作正常。但是如果我有一个对象,我期望一个列表包含一个对象作为响应,但是输出只是一个对象。并且省略了列表。 我的调解人有什么问题吗 以下是JsonToSoap中介(在中介中): 一个对象的响应是: { "Response": { "LivePrices": { "Last": 1903, "P
{
"Response": {
"LivePrices": {
"Last": 1903,
"Price": 1911,
"Quantity": 15345096,
"Since": "2018-07-24T00:00:00"
}
}
}
这是wso2 esb的预期行为,因为您所做的是使用属性“application/json”盲目地从XML转换为json,因此如果您只有多个元素,那么您将获得对象列表,如果只有一个元素,那么您将获得一个对象作为响应。 您需要使用XSLT进行如下转换
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="text" indent="yes" media-type="application/json" encoding="UTF-8"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">{
"Response":{
"LivePrices":[
<xsl:for-each select="//LivePrices">
{
"Last":"<xsl:value-of select="//Last"/>" ,
"Price":"<xsl:value-of select="//Price"/>"
}
<xsl:if test="position()!=last()">,</xsl:if>
</xsl:for-each>
]
}
}
</xsl:template>
</xsl:stylesheet>
{
“答复”:{
“现场价格”:[
{
“最后”:“,
“价格”:”
}
,
]
}
}
不客气,很乐意帮助:)
{
"Response": {
"LivePrices": [
{
"Last": 2100,
"Price": 2075,
"Quantity": 29252869,
"Since": "2018-07-18T00:00:00"
},
{
"Last": 2067,
"Price": 2067,
"Quantity": 40790,
"Since": "2018-07-24T11:04:35"
},
{
"Last": 2067,
"Price": 2067,
"Quantity": 40790,
"Since": "2018-07-24T11:08:35"
}
]
}
}
{
"Response": {
"LivePrices": {
"Last": 1903,
"Price": 1911,
"Quantity": 15345096,
"Since": "2018-07-24T00:00:00"
}
}
}
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="text" indent="yes" media-type="application/json" encoding="UTF-8"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">{
"Response":{
"LivePrices":[
<xsl:for-each select="//LivePrices">
{
"Last":"<xsl:value-of select="//Last"/>" ,
"Price":"<xsl:value-of select="//Price"/>"
}
<xsl:if test="position()!=last()">,</xsl:if>
</xsl:for-each>
]
}
}
</xsl:template>
</xsl:stylesheet>