如何在 MEL 中正确地将 ArrayList 转换为 String

How properly convert ArrayList to String in MEL

所以我有有效载荷,其中一部分有这样的数组:

{
...
members [
  John,
  Robert,
  Tony
]
...
}

我尝试将变量设置为:

#[payload.members joinBy(",")]

但它的 return 类型为 java.lang.ArrayList

但是如果对 DW 1.0 做同样的事情(输出到变量):

%dw 1.0
%output application/java
---
payload.members joinBy ","

我按需收到 - java.lang.String

任何建议为什么会这样,或者我在 MEL 中做错了什么,就像在变换组件中一样? (我正在尝试避免在如此简单的步骤中使用转换组件)

您混淆了两种不同的语言。 Mule 3.x 使用 MEL as its expression language. That means that every expression of the form #[...] is a MEL expression. Mule 3.7+ also supports DataWeave 1 inside the Transform component. Those are two different languages. The joinBy 操作是一个 DataWeave 操作,因此预计它不会在 MEL 表达式中工作。我不确定为什么它不只是抛出错误。

在 MEL 中你可以这样做:

#[ org.apache.commons.lang.StringUtils.join(payload.members, ",") ]

最基本的 Java 表达式与 MEL 兼容。

请注意,在 Mule 4 中,唯一的表达式语言是 DataWeave 2。表达式在 #[...] 中的工作方式与在 Transform 组件中的相同。