AWS Step Functions:如何移除冗余节点获取纯值(CDK实现)
解决AWS Step Functions Pass状态赋值冗余嵌套问题
问题描述
使用AWS CDK(Java)构建Step Functions时,需求为:当info.valueMaybeNull存在且非空时,将其值直接赋值给request.data.newValue。但当前实现通过Pass状态生成了冗余的嵌套结构newValue.newName,不符合预期。
输入示例
{ "info": { "firstname": "Nicolas", "valueMaybeNull": "Hola" }, "request": { "data": { "currency": "EUR" } } }
当前错误输出
{ "info": { "firstname": "Nicolas", "valueMaybeNull": "Hola" }, "request": { "data": { "currency": "EUR", "newValue": { "newName": "Hola" } } } }
期望输出
{ "info": { "firstname": "Nicolas", "valueMaybeNull": "Hola" }, "request": { "data": { "currency": "EUR", "newValue": "Hola" } } }
问题根源
当前代码中,Pass状态通过parameters创建了一个包含newName键的对象,再通过resultPath将该对象赋值给request.data.newValue,导致了嵌套结构:
parameters(Map.of("newName.$", "$.info.valueMaybeNull"))生成{newName: "Hola"}对象resultPath("$.request.data.newValue")将这个对象赋值给newValue节点,最终形成newValue.newName的嵌套
修正方案
修改addValueState方法,让Pass状态直接返回info.valueMaybeNull的纯值,而非带键的对象,再赋值到目标节点:
var isValueEmptyStep = new Choice(scope, "Is value not empty?"); Chain verifyIfValueIsNullStep = isValueEmptyStep .when( Condition.and( Condition.isPresent("$.info.valueMaybeNull"), Condition.isNotNull("$.info.valueMaybeNull")), addValueState(scope)) .otherwise(new Pass(scope, "Value is null, continue normally")) .afterwards(); return Chain.start(verifyIfValueIsNullStep); } public Pass addValueState(final Construct scope) { return Pass.Builder.create(scope, "Add value to request data") // 直接返回info.valueMaybeNull的纯值,而非带键对象 .parameters(Map.of("$.", "$.info.valueMaybeNull")) // 将纯值直接赋值到目标节点 .resultPath("$.request.data.newValue") .build(); }
关键修改点
- 将
parameters中的映射从"newName.$"改为"$.": "$.info.valueMaybeNull":"$."表示直接返回指定路径的原始值,而非包装成键值对对象 - 确保
resultPath指向正确的目标节点$.request.data.newValue,让纯值直接覆盖/写入该节点
内容的提问来源于stack exchange,提问作者nicearma
相关产品推荐
相关产品推荐

