首页 > 解决方案 > Mule ESB(Groovy 脚本):如何检查值并将新的键值映射添加到 java.util.LinkedList

问题描述

我正在调用一个服务,它以 LinkedList 的形式从数据库返回数据。我需要使用一个名为“status”的新字段来更新 LinkedList,该字段由 endDate 确定。

骡负载类: java.util.LinkedList

骡负载: [{serialNumber=, maintenanceId=12345, customerID=09890, startDate=2017-10-10 23:34:17, endDate=2018-10-10 23:34:17},{serialNumber=, maintenanceId=09091 , customerID=74743, startDate=2014-8-16 23:34:17, endDate=2019-8-16 23:34:17}]

我在 mule 中遇到的问题是我无法导航到链接列表以检索值以及向列表中添加新值。希望有人能给我一些关于前进的最佳方式的建议。我正在尝试使用 groovy 转换器来更新有效负载,但进展并不顺利,因此我没有任何代码可显示。

感谢您抽出宝贵时间!

标签: javagroovymuleanypoint-studiomule-esb

解决方案


我有类似的要求(有效负载是 JSON,但它也应该可以工作),这就是我使用 Dataweave 所做的(我添加了您的数据,以便更容易理解)。

%dw 1.0
%output application/java
---
flowVars.input2 map {
    serialNumber : $.serialNumber,
    maintenanceId: $.maintenanceId,
    customerID: $.customerID,
    startDate: $.startDate,
    endDate: $.endDate,
    status: "deactivated" when $.endDate as :date {format:"yyyy-M-dd HH:mm:ss"} > (now  as :date {format:"yyyy-M-dd HH:mm:ss"}) otherwise "activated"
}

通过此转换,您可以迭代列表并根据您的要求添加状态值。

输入示例:

 [{"serialNumber":"test1", "maintenanceId":"12345", "customerID":"09890", "startDate":"2017-10-10 23:34:17", "endDate":"2018-10-10 23:34:17"},{"serialNumber":"test2", "maintenanceId":"09091", "customerID":"74743", "startDate":"2014-8-15 23:34:17", "endDate":"2018-8-15 23:34:17"}]

输出示例

[{"serialNumber":"test1","maintenanceId":"12345","customerID":"09890","startDate":"2017-10-10 23:34:17","endDate":"2018-10-10 23:34:17","status":"deactivated"},{"serialNumber":"test2","maintenanceId":"09091","customerID":"74743","startDate":"2014-8-15 23:34:17","endDate":"2018-8-15 23:34:17","status":"activated"}]

希望这可以帮助你


推荐阅读