在我与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]"/>
答案 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类型。