如何将org.glassfish.grizzly.utils.BufferInputStream转换为Mule中的JSON?

时间:2016-09-13 18:03:13

标签: mule

在我与Mule的第一步中,我正在编写一个基本的Http代理。 目前我将请求转发给api服务器,我想做的是在响应客户端之前读取我从中收到的有效负载。

当我尝试使用#[payload]进行记录时,会打印

 org.glassfish.grizzly.utils.BufferInputStream@2306df30

如何以JSON格式正确打印?

完整代码:

<flow name="proxy">
    <http:listener config-ref="http-lc-0.0.0.0-8081" path="![p['proxy.path']]" parseRequest="false"/>

    <http:request config-ref="http-request-config" method="#[message.inboundProperties['http.method']]"
                  path="#[message.inboundProperties['http.request.path'].substring(message.inboundProperties['http.listener.path'].length()-2)]" parseResponse="false">
        <http:request-builder>
            <http:query-params expression="#[message.inboundProperties.'http.query.params']"/>
        </http:request-builder>
        <http:success-status-code-validator values="0..599" />
    </http:request>

    <logger doc:name="Logger" level="INFO" message="Payload #[payload]"/>

5 个答案:

答案 0 :(得分:17)

HTTP请求后的有效负载通常采用流格式,参考: - https://docs.mulesoft.com/mule-user-guide/v/3.7/http-request-connector
http:request

之后,有两种方法可以获得有效负载 在<object-to-string-transformer doc:name="Object to String"/>之后

1)http:request
2)使用记录器并使用MEL表达式<logger message="#[message.payloadAs(java.lang.String)]" level="INFO" doc:name="Logger"/>

答案 1 :(得分:3)

尝试#[message.payloadAs(java.lang.String)],它会记录预期的输出。

希望这有帮助。

答案 2 :(得分:0)

http组件将作为InputStream发送,因此在http组件之后使用字节数组到字符串变换器。如果你只想打印,可以使用#[message.payloadAs(java.lang.String) ]但你想做任何操作只需将一个字节数组拖放到字符串转换器

答案 3 :(得分:0)

最简单的方法是在http请求组件之后使用<object-to-string-transformer doc:name="Object to String"/>,然后使用#[payload]放置一个记录器。

答案 4 :(得分:0)

确保获得正确的JSON响应的一种方法是将有效负载设置为application/json模仿类型。

<set-payload value="#[payload]" mimeType="application/json" doc:name="Set Payload"/>

在HTTP请求之后添加此行。只需将有效负载值设置为#[payload]即可将其转换为json,而将其转换为字符串将仅将其打印为字符串而不是Json类型。