选择路由器表达式Mule

选择路由器表达式Mule,mule,mule-component,Mule,Mule Component,我正在构建一个api,向其发送json请求,如下所示: { "type":"string", "code": 101 } 我正在使用choice路由器,并根据代码路由消息。 i、 e如果代码不是101和100,那么何时执行条件 当表达式为-#[json:code!=101&&json:code!=100] 但即使代码是103,上面的表达式也返回true 我假设您的注释“代码在双引号中”表示有效负载如下所示: { "type": "string", "code": "100" }

我正在构建一个api,向其发送json请求,如下所示:

{
  "type":"string",
  "code": 101
}
我正在使用choice路由器,并根据代码路由消息。 i、 e如果代码不是101和100,那么何时执行条件 当表达式为-
#[json:code!=101&&json:code!=100]

但即使代码是103,上面的表达式也返回true

我假设您的注释“代码在双引号中”表示有效负载如下所示:

{
  "type": "string",
  "code": "100"
}
如果是这样的话,我建议您将其转换为Java并从那里开始工作。如果代码是字符串,则需要将其作为
100!='100'

<json:json-to-object-transformer returnClass="java.util.Map" doc:name="JSON to Object"/>
<choice doc:name="Choice - Code?">
    <when expression="#[payload.code != '101' &amp;&amp; payload.code != '100']">
        <logger level="INFO" doc:name="Logger - Do this"/>
    </when>
    <otherwise>
        <logger level="INFO" doc:name="Logger - Do that"/>
    </otherwise>
</choice>

在使用Json负载之前使用Json到对象转换器

对于mule中的逻辑运算符,使用(and,or)代替(&&,| |): xml配置代码

<json:json-to-object-transformer returnClass="java.util.Map" doc:name="json to obj"/>
<choice doc:name="Choice">
    <when expression="#[payload.code != 101 and payload.code != 100]">
        <logger level="INFO" doc:name="logger"/>
    </when>
    <otherwise>
        <logger level="INFO" doc:name="default"/>
    </otherwise>
</choice>


代码在双引号中,您不希望它返回true吗?103不是101,也不是100。OP没有使用DataWeave
&&
|
是OP用例中使用MEL的合适逻辑运算符类型。