【问题标题】:Mule Dataweave : Filter in combination with Default function not workingMule Dataweave:与默认功能结合使用的过滤器不起作用
【发布时间】:2018-02-04 22:21:09
【问题描述】:

我正在使用 Mule dataweave,这是我的请求,我想 filter 我的请求 code == "P" 如果包含 Code = p 的请求不存在,则始终默认为 code == "C" 因为代码= C 总是出现在传入的请求中。

请求:

{
   "addresses": [
     {
        "contact": 0,
        "code": "P",
        "TypeDescription": "POSTAL",
        "postcode": "1007",
        "State": "TamilNadu",
        "Description": "Test",         
    },
    {
        "contact": 1,
        "code": "C",
        "TypeDescription": "PHYSICAL",
        "postcode": "Bangalore",
        "State": "",
        "Description": "NEW",

    }
 ] 
}

数据编织:

 %dw 1.0
 %output application/json
 ---
 payload.addresses filter $.code == "P"  

它工作正常并过滤掉包含 P 的列表,但是当尝试将 filterdefault 结合使用时,它不会。

我在dataweave payload.addresses filter $.code == "P1" default "anything here as of now"中尝试过如下方式。

由于在上述响应中,我正在过滤请求中不存在的 P1,因此我期待响应中的 default 内容。但它不起作用。

注意:使用 when 和 else,将列表带入两次。我只需要一个列表作为响应,要么是包含代码 P 的列表,要么是包含 C 的列表。

使用 MUle 3.8.5 V。请告诉我您的想法。提前致谢。

【问题讨论】:

    标签: mule mule-component dataweave mule-el


    【解决方案1】:

    据我了解,Dataweave 从右到左工作,所以在这种情况下评估如下:

    1. '"P1" default "anything here as of now"' 解析为 "P1"
    2. 在 'payload.addresses' 上运行 'filter $.code == "P1"'

    当然,第一个选项将始终评估为“P1”,因此默认值基本上被忽略了。您需要在表达式的其余部分周围使用括号,然后使用默认值。现在它将计算括号,然后是默认表达式。

    例如:(payload.addresses filter $.code == "P1") 默认“现在的任何东西”

    但这不是一个很好的例子,因为如果没有任何选项匹配,过滤器将返回一个空列表,而不是 null,因此默认值不起作用。您可以尝试以下答案:https://stackoverflow.com/a/44431546/2614624

    【讨论】:

    • 赞成这个,它为解决方案提供了一个提示 - 过滤器返回空数组而不是空。我想出了上面的解决方案。非常感谢
    【解决方案2】:

    在局部变量中创建一个默认值,并在过滤时使用 OR 条件。 下面的例子。

    {
      biggerThanTwo: [0, 1, 2, 3, 4, 5] filter (($ > 2) OR ($ ==1))
    }
    

    【讨论】:

    • 您只能检查一个条件
    【解决方案3】:

    这是我的解决方案。正如@Clinton 提到的过滤器返回空数组不为空,这是它的工作方式

    %dw 1.0 %输出应用程序/java

    %var conditionalRoute = payload.addresses 过滤器 $.addressTypeCode == "P"

    conditionalRoute 时为 conditionalRoute != [] 否则为“目前为止的任何内容”

    【讨论】:

      猜你喜欢
      • 2018-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-24
      • 2021-05-05
      相关资源
      最近更新 更多