【问题标题】:Extract fields from JSON response in Mule从 Mule 中的 JSON 响应中提取字段
【发布时间】:2015-07-07 06:15:29
【问题描述】:

我有一个 JSON 响应,类似于 {"id":10,"name":"ABCD","deptId":0,"address":null}

我需要拆分这个 JSON 并提取 id 以传递给另一个服务。 我的骡子xml如下

   <jersey:resources doc:name="REST">
        <component class="com.employee.service.EmployeeService"/>
    </jersey:resources>
    <object-to-string-transformer doc:name="Object to String"/> 
    <logger message="Employee Response #[payload]" level="INFO" doc:name="Logger"/>
     <set-payload value="#[payload]" doc:name="Set Payload" />
    <json:object-to-json-transformer doc:name="Convert String to JSON" />
    <logger message="JSON Response #[payload]" level="INFO" doc:name="Logger"/>
    <json:json-to-object-transformer returnClass="java.util.Map" />

    <expression-transformer expression="#[payload]" />
    <collection-splitter />

当我运行它时,我得到了错误

对象“java.util.LinkedHashMap”的类型不正确。它必须是“{interface java.lang.Iterable,interface java.util.Iterator,interface org.mule.routing.MessageSequence,interface java.util.Collection}”类型(java.lang.IllegalArgumentException)。消息负载类型:LinkedHashMap

我该如何解决这个错误?

谢谢

【问题讨论】:

    标签: json mule mule-studio


    【解决方案1】:

    我可以通过编写自定义转换器来完成这项工作

    【讨论】:

      【解决方案2】:

      删除最后四行代码。在 flowvars 中设置 logger #[payload.id] 并访问它

      【讨论】:

      • 您的 json 格式包含在引号中,例如 "id":"10"。并尝试
      【解决方案3】:

      我相信你得到的错误已经在这部分了,&lt;collection-splitter /&gt;。你已经调试过这个了吗?

      不确定拆分器的用途,但是一旦您拥有 HashMap 类型的有效负载,您只需执行 #[payload.id] 即可获取 id。

      【讨论】:

      • 我尝试使用 #[payload.id],但我总是得到 null 作为值。
      • 这很奇怪,但看起来你已经通过自定义转换器修复了它。你可以使用 anypoint studio 的调试,它真的很有帮助,因为当它达到给定时你会看到 mule 消息/有效负载零件。您还可以运行 MEL 来查看它返回的内容。
      【解决方案4】:

      JSon 模块也可以在表达式中使用 jsonpath,例如:

      #[json:/id]
      

      【讨论】:

        猜你喜欢
        • 2015-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多