【问题标题】:How to convert java object to JSON after java:invoke in mule 4java:invoke in mule 4之后如何将java对象转换为JSON
【发布时间】:2020-02-04 20:14:56
【问题描述】:

我正在使用 mule 4。我正在调用一个 java 方法,它返回一个 java 对象作为有效负载。如果尝试打印有效负载,我会得到类似com.myproject.services.DataInjectorManager$MyClass@7606ba6e 的信息。如何将其转换为 JSON? 我的骡流是:

<flow name="processFile">
        <http:listener config-ref="HttpListenerConfig" path="/processFile" allowedMethods="GET">
            <http:response statusCode="200"/>
        </http:listener>
        <java:invoke doc:name="Invoke" doc:id="d56b8f5a-4dfa-4737-b6f3-b740585ab58d" instance="dataInjectorManager"
                     class="com.myproject.services.DataInjectorManager"
                     method="processFile(java.lang.String)">
            <java:args>#[{
                'arg0': attributes.queryParams.file
                }]
            </java:args>
        </java:invoke>
        <logger message="#[payload]" level="INFO" />
    </flow>

提前谢谢你

【问题讨论】:

    标签: java mule mule-esb mulesoft


    【解决方案1】:

    您今天看到的日志是因为您的班级中没有toString 实现,所以使用默认的Object#toString。如果它只是关于日志记录,您可以尝试添加它。如果您真的想记录 JSON,那么您可以这样做:

    &lt;logger message="#[output application/json --- payload]" level="INFO" /&gt;

    如果您还想将该 JSON 作为响应返回,那么您需要在记录和响应之前使用转换组件将您的有效负载转换为 JSON:

    <ee:transform >
        <ee:message >
            <ee:set-payload ><![CDATA[%dw 2.0
                output application/json
                ---
                payload]]>
            </ee:set-payload>
        </ee:message>
    </ee:transform>
    

    请注意,您可能需要构建更复杂的转换,具体取决于您的 Java 对象的具体外观以及您希望 JSON 中的内容。

    【讨论】:

    • 非常感谢!在类中添加一个 toString 方法解决了问题
    猜你喜欢
    • 1970-01-01
    • 2020-07-20
    • 2020-05-06
    • 2023-03-17
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多