在使用MULE时,我将从HTTP请求接收的有效负载转换为json对象并将其映射到变量。如果我没有传递其中一个变量,我在评估表达式时会遇到异常。
<flow name="test">
<http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/>
<json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object"/>
<set-variable variableName="a" value="#[message.payload.a]"
<set-variable variableName="b" value="#[message.payload.b]"
<logger message="a: #[a]" level="INFO" doc:name="Logger"></logger>
</flow>
当有效载荷
时{
"a": "val1",
"b": "val2"
}
应用程序运行正常。
但如果有效载荷是
{
"b": "val2"
}
我得到以下异常:
ERROR [].HTTP_Listener_Configuration.worker.01] org.mule.exception.DefaultMessagingExceptionStrategy:
********************************************************************************
Message : Execution of the expression "a" failed. (org.mule.api.expression.ExpressionRuntimeException).
Payload : {b="val2"}
Payload Type : java.util.LinkedHashMap
Element : /test/processors/10 @ test:test.xml:47 (Logger)
Element XML : <logger message="a: #[a]" level="INFO" doc:name="Logger"></logger>
--------------------------------------------------------------------------------
Root Exception stack trace:
[Error: unresolvable property or identifier: a]
[Near : {... a ....}]
我可以检查并将变量'a'
的值附加为NULL
吗?
P.S。我想使用此变量作为其他一些http请求的有效负载中的参数之一进行发送。
答案 0 :(得分:1)
使用#[flowVars.a]
代替#[a]
将导致null
而不是例外。
答案 1 :(得分:1)
您的实施有些不对劲。在http监听器之后,有效负载是一个原始响应(JSON),它以任何方式都不能被#[payload.a]或#[payload [&#39; a&#39;]]访问。您应该将一个json添加到Object(将json转换为map)。从这里你可以像这样#[有效载荷[&#39; a&#39;]]或#[payload.a]