0

当我使用“Body to Parameter Map”转换器时,我可以获取 URL 中的参数,但无法获取内容。当我使用“JSON to Object”转换器时,我只能获取内容,但参数在有效负载中丢失。我怎样才能得到他们两个?配置如下:

<flow name="zhicall-httpFlow" doc:name="zhicall-httpFlow">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081"  path="test" encoding="UTF-8" doc:name="InHTTP" mimeType="application/json"/>
    <http:body-to-parameter-map-transformer doc:name="Body to Parameter Map"/>
    <json:json-to-object-transformer returnClass="java.util.Map" mimeType="application/json" doc:name="JSON to Object"/>
   <!--  <http:body-to-parameter-map-transformer ignoreBadInput="true" doc:name="Body to Parameter Map" encoding="UTF-8" mimeType="application/json"/> -->
    <!-- <set-property doc:name="Content-Type Property" propertyName="Content-Type" value="application/json"/> -->
    <custom-transformer encoding="UTF-8" class="com.zhicall.esb.transformer.MyTransformer" doc:name="Java" mimeType="application/json"/>
</flow>
4

1 回答 1

2

根据提供的流程,第一个转换器转换您的有效负载。因此,当处理到达第二个转换器(json-to-object)时,原始有效负载已不存在。

因此,请尝试将您的原始有效负载保存为流变量,然后尝试在其上应用变压器。

我已经修改了流程,以便将原始有效负载保存为流程变量。在 http 转换器之后,转换后的有效负载被保存为流变量,有效负载被重置为原始输入。然后第二个转换器再次作用于这个原始有效负载并对其进行转换。这样,两个转换器独立地转换原件。而且你有两个转换后的输出,一个作为流变量,另一个作为 json 转换器之后的有效负载。

<flow name="zhicall-httpFlow" doc:name="zhicall-httpFlow">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081"  path="test" encoding="UTF-8" doc:name="InHTTP" mimeType="application/json"/>

    <set-variable variableName="originalInput" value="#[payload]" />

    <http:body-to-parameter-map-transformer doc:name="Body to Parameter Map"/>

    <set-variable value="#[payload]" variableName="httpParamMap" />
    <set-payload value="#[flowVars['originalInput']]"></set-payload>

    <json:json-to-object-transformer returnClass="java.util.Map" mimeType="application/json" doc:name="JSON to Object"/>
   <!--  <http:body-to-parameter-map-transformer ignoreBadInput="true" doc:name="Body to Parameter Map" encoding="UTF-8" mimeType="application/json"/> -->
    <!-- <set-property doc:name="Content-Type Property" propertyName="Content-Type" value="application/json"/> -->
    <custom-transformer encoding="UTF-8" class="com.zhicall.esb.transformer.MyTransformer" doc:name="Java" mimeType="application/json"/>
</flow>

希望这可以帮助。

于 2013-05-29T14:05:51.690 回答