【问题标题】:How to extract all the JSON value in Mule ind insert to DB如何提取 Mule ind 中的所有 JSON 值插入到 DB
【发布时间】:2014-07-13 23:51:47
【问题描述】:

我的 Mule 流程中有一个 REST 服务:-

<flow name="restServiceFlow1" doc:name="restFlow1">
        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8082" doc:name="HTTP"/>
        <jersey:resources doc:name="REST">
            <component class="com.test.services.schema.maindata.v1.Impl.MainDataImpl"/>
        </jersey:resources>
 </flow>

我还有另一个流,它将 JSON 请求从文件发送到该服务流并使用它:-

<flow name="restFlow2" doc:name="restFlow2">
 <file:inbound-endpoint path="E:\backup\test" responseTimeout="10000" doc:name="File" connector-ref="File_Global">
                        <file:filename-regex-filter pattern="aa.txt" caseSensitive="false"/>
 </file:inbound-endpoint>

        <json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/>
        <http:outbound-endpoint exchange-pattern="request-response" contentType="application/json" method="GET" address="http://localhost:8082/getData/insert/?id=#[payload.insertDataRequest[0].id]&amp;name=#[payload.insertDataRequest[0].name]&amp;age=#[payload.insertDataRequest[0].age]&amp;designation=#[payload.insertDataRequest[0].designation]" doc:name="HTTP"/>
     </flow>

现在我的 JSON 请求是:-

{
    "insertDataRequest": [
        {
            "id": "6",
            "name": "ddddd",
            "age": "55",
            "designation": "WQQQQQ"
        },
        {
            "id": "64",
            "name": "mmmm",
            "age": "545",
            "designation": "TTTTTTTTTT"
        }
    ]
}

现在,问题是每当我将 JSON 请求作为文件放置时……只插入第一个数据……那只是

{
                "id": "6",
                "name": "ddddd",
                "age": "55",
                "designation": "WQQQQQ"
 }

正在插入 DB ..

.... .... 现在我希望将所有数据插入到数据库中...我该如何实现呢? ..我每个人都需要任何数据来获取所有数据吗??...请帮助...

【问题讨论】:

  • 我看不到您用于插入数据库的配置或代码,因此无法真正回答。你能发帖吗?另外,为什么要在通过 http 发送之前转换为地图。
  • 嗨 Ryan .. 感谢您的回复... 请找到我更新的问题以插入数据库 .. 我已使用 JDBCTemplate 插入在服务中运行良好的数据... 我唯一的问题正在使用 JSON 响应一次插入所有数据 .. 例如,如果我使用以下响应:-{“insertDataRequest”:[{“id”:“6”,“name”:“ddddd”,“age”:“ 55","designation": "WQQQQQ"} ]} .. 然后它工作正常,数据被插入..
  • 但如果我使用以下 JSON 请求:-{"insertDataRequest": [{"id": "6","name": "ddddd","age": "55","designation ": "WQQQQQ"},{"id": "64", "name": "mmmm","age": "545","designation": "TTTTTTTTTT"}]} ... 只插入第一行.. 如何从 JSON 请求中插入所有行... ???
  • 我在 Mule 配置中使用 restFlow2 Flow 从文件传递 JSON 请求以使用服务

标签: json xpath mule mule-el


【解决方案1】:

对每个块使用 a 来迭代 insertDataRequest 条目:

<flow name="restFlow2">
  <file:inbound-endpoint path="E:\backup\test" responseTimeout="10000" connector-ref="File_Global">
    <file:filename-regex-filter pattern="aa.txt" caseSensitive="false"/>
  </file:inbound-endpoint>

  <json:json-to-object-transformer returnClass="java.util.HashMap"/>

  <foreach collection="#[payload.insertDataRequest]">
    <http:outbound-endpoint exchange-pattern="request-response"
          contentType="application/json" method="GET"
          address="http://localhost:8082/getData/insert/?id=#[payload.id]&amp;name=#[payload.name]&amp;age=#[payload.age]&amp;designation=#[payload.designation]"/>
  </foreach>
</flow>

请注意,您使用 GET 而不是 POST 执行插入的事实不符合 REST 原则...

【讨论】:

  • 太棒了...这是我所期待的...谢谢大卫...它正在工作...一个小问题..我怎样才能获得根节点名称?例如,在这里我将 insertDataRequest 作为 JSON 请求中的根节点 .. 现在我可能有不同的根节点,例如 updateDataRequest .. 现在如何在流程中获取根节点名称?我问是因为我需要根据节点名称路由到不同的 http 出站端点..
  • json-to-object-transformer之后,可以得到“根节点名”(实际上是最上面的JSON对象的第一个字段名):#[message.payload.keySet().iterator().next()]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-22
  • 2020-07-03
  • 2015-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多