【问题标题】:Better way of doing a Null check in Dataweave Mule在 Dataweave Mule 中进行 Null 检查的更好方法
【发布时间】:2020-05-21 05:19:30
【问题描述】:

我通常在Dataweave中做一个空检查,如下,

{ payload.variableA 当有效载荷 != null 否则为 null }

但我的一位同事建议我使用默认 {} 来减少空检查,如下所示,

%var x = payload default {}
{
payload.variableA
}

因为它提高了可读性,尤其是在复杂的转换中。

但是这样做真的是一个好习惯吗?它会导致任何问题,例如创建不必要的空对象吗?

【问题讨论】:

    标签: dataweave mulesoft


    【解决方案1】:

    首先,payload.variableA 应该在有效负载为 null 时返回 null。您无需对此进行检查。尝试访问空对象上的键会返回空值,而不是抛出您可能习惯的空指针异常。

    您可以将default 视为dataweave 的null-coalesce 运算符。您可以将其设置为空对象、默认值等。

    https://docs.mulesoft.com/mule-runtime/4.3/dataweave-cookbook-defaults

    默认操作符在 DW1 和 DW2 中的行为相同。

    【讨论】:

    • 知道了。但是假设我们想要访问更深层次的孩子,例如: { x: payload.variableA.variableB , y: payload.variableA.variableB.variableC z: payload.variableA } 那么我们不需要做空检查吗?相反,您认为我们可以这样做吗: %var temp = payload.variableA default {} { x: temp.variableB , y: temp.variableB.variableC z: temp } Y 还能工作吗?
    • @RohitKakani 没有。你可以从字面上做到这一点{ a: null.A.A.A },它只会产生{a: null }而没有任何错误。区分 null 和“此密钥甚至不存在”的唯一方法是进行类似{ test: "key presset" when null.A.A.A? otherwise "key missing" } 的检查。这会让你“钥匙丢失”。所以你有? 来检查密钥是否存在。最终,data-weave 不关心您尝试访问键的对象是否为 null,也不关心该键是否存在 - 在这些情况下它将返回 null。现在,它确实在乎你是否尝试做一些类似强制的事情。
    • 明白。谢谢!
    • 这和flowVars一样吗:我们可以替换这个吗: variableA: null when flowVars.variableB == null 否则 flowVars.variableB 用 variableA: flowVars.variableB
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多