Mule ESB 3.8如何将非空变量添加合并到payload中
问题原因
直接调用payload.Put(variable)无法实现合并的核心原因是:该方法会将传入的variable整体作为单个属性值写入payload,不会自动展开遍历variable内部的键值对,最终会得到类似{Name:User1, Age:29, variable:{Address:Planet Earth}}的嵌套结构,和预期的平级合并效果不符。
正确实现步骤
- 非空校验:先判断待合并变量不为空,空值直接终止合并逻辑,避免写入无效内容
参考校验逻辑(以通用的键值对结构为例,不同语言语法可按需调整):// 校验变量本身不为null、不是空对象 if variable is empty: exit merge process - 逐键值合并:不要传入整个变量对象,遍历变量内的所有键值对,逐个写入原payload即可
参考实现代码:
如果你使用的封装类没有直接暴露键值索引写入能力,可以调用单键值写入方法,逐个传入键名和对应值,比如for key, value in variable: payload[key] = valuepayload.Set("Address", "Planet Earth"),最终就能得到预期的平级结构:{ Name=User1, Age=29, Address=Planet Earth }
补充说明:如果待合并变量中存在和原payload同名的键,上述逻辑会默认用新变量的值覆盖原payload同键内容;如果需要保留原payload的旧值,在写入前增加一层键存在判断即可。
内容的提问来源于stack exchange,提问作者Gorodeckij Dimitrij
相关产品推荐
相关产品推荐

