Url 如果查询参数不可用,Mule Throw错误
如果查询参数say requestId在请求URL中不存在,我需要抛出一个异常 URL如下所示:my.server.com?requestId=123&age=26 在这里,我将requestId记录在message属性中,如下所示:Url 如果查询参数不可用,Mule Throw错误,url,mule,Url,Mule,如果查询参数say requestId在请求URL中不存在,我需要抛出一个异常 URL如下所示:my.server.com?requestId=123&age=26 在这里,我将requestId记录在message属性中,如下所示: <message-properties-transformer scope="session" doc:name="Adding requestId"> <add-message-property key="requestId" valu
<message-properties-transformer scope="session" doc:name="Adding requestId">
<add-message-property key="requestId" value="#[message.inboundProperties.'http.query.params'.requestId]"/>
</message-properties-transformer>
如果URL不包含requestId,则它将为空。但在本例中,我想检查requestId是否存在。
然后使用下面的表达式检查HTTP URL中的查询参数可用性
#[org.mule.util.StringUtils.isNotEmpty(message.inboundProperties.'http.query.params'.requestId)]
请参阅下面使用choice router的示例代码,它根据查询参数的可用性路由控件
<choice doc:name="Choice">
<when expression="#[org.mule.util.StringUtils.isNotEmpty(message.inboundProperties.'http.query.params'.requestId)]">
<logger message="Query param available in request level="INFO" doc:name="Logger"/>
</when>
<otherwise>
<logger message="Query param not available in request level="INFO" doc:name="Logger"/>
</otherwise>
</choice>
使用下面的表达式检查HTTP URL中的查询参数可用性
#[org.mule.util.StringUtils.isNotEmpty(message.inboundProperties.'http.query.params'.requestId)]
请参阅下面使用choice router的示例代码,它根据查询参数的可用性路由控件
<choice doc:name="Choice">
<when expression="#[org.mule.util.StringUtils.isNotEmpty(message.inboundProperties.'http.query.params'.requestId)]">
<logger message="Query param available in request level="INFO" doc:name="Logger"/>
</when>
<otherwise>
<logger message="Query param not available in request level="INFO" doc:name="Logger"/>
</otherwise>
</choice>
根据您的要求,您可以执行以下操作:-
<choice doc:name="Choice">
<when expression="#[org.mule.util.StringUtils.isNotEmpty(message.inboundProperties.'http.query.params'.requestId)]">
<logger message="query parameter exist" level="INFO" doc:name="Logger"/>
</when>
<otherwise>
<logger message="query parameter does not exist" level="INFO" doc:name="Logger"/>
<!-- Throw your exception here -->
<scripting:component doc:name="Script">
<scripting:script engine="Groovy"><![CDATA[
throw new IllegalArgumentException('query parameter does not exist')
]]></scripting:script>
</scripting:component>
</otherwise>
</choice>
此处,如果查询参数存在,它将简单地登录到记录器,如果查询参数不存在,它将抛出您想要的异常。根据您的要求,您可以执行以下操作:-
<choice doc:name="Choice">
<when expression="#[org.mule.util.StringUtils.isNotEmpty(message.inboundProperties.'http.query.params'.requestId)]">
<logger message="query parameter exist" level="INFO" doc:name="Logger"/>
</when>
<otherwise>
<logger message="query parameter does not exist" level="INFO" doc:name="Logger"/>
<!-- Throw your exception here -->
<scripting:component doc:name="Script">
<scripting:script engine="Groovy"><![CDATA[
throw new IllegalArgumentException('query parameter does not exist')
]]></scripting:script>
</scripting:component>
</otherwise>
</choice>
这里,如果查询参数存在,它将简单地登录到记录器,如果查询参数不存在,它将抛出您想要的异常。您尝试过消息过滤器吗
<message-filter throwOnUnaccepted="true">
<expression-filter
expression="#[message.inboundProperties.'http.query.params'.requestId != empty]" />
</message-filter>
当requestId为null、false、empty、zero或空集合时,这将引发FilterUnacceptedException
如果过滤器需要接受零,则必须更改条件
你试过邮件过滤器吗
<message-filter throwOnUnaccepted="true">
<expression-filter
expression="#[message.inboundProperties.'http.query.params'.requestId != empty]" />
</message-filter>
当requestId为null、false、empty、zero或空集合时,这将引发FilterUnacceptedException
如果过滤器需要接受零,则必须更改条件
谢谢大家把你的想法。最后,我得到了一个使用groovy的简单方法,我不需要放置任何选择路由器或任何表达式过滤器。他是我的密码:
if(!message.getInboundProperty("http.query.params").find{ it.key == "requestId" }){
throw new IllegalArgumentException('requestId does not exist');
}
谢谢大家把你的想法。最后,我得到了一个使用groovy的简单方法,我不需要放置任何选择路由器或任何表达式过滤器。他是我的密码:
if(!message.getInboundProperty("http.query.params").find{ it.key == "requestId" }){
throw new IllegalArgumentException('requestId does not exist');
}
如果查询参数退出并且没有如下值http://localhost:8081/test?requestId=&age=26 然后,记录器将在请求级别打印可用的查询参数,即使该值不在请求级别,我同意您的意见。但问题在于检查HTTP URL中是否存在查询参数。但您建议的方法更可靠,因为它可以检查两种情况。i、 e空查询参数和该查询参数的空值。我将更新我的答案。如果查询参数退出并且没有如下值http://localhost:8081/test?requestId=&age=26 然后,记录器将在请求级别打印可用的查询参数,即使该值不在请求级别,我同意您的意见。但问题在于检查HTTP URL中是否存在查询参数。但您建议的方法更可靠,因为它可以检查两种情况。i、 e空查询参数和该查询参数的空值。我将更新我的答案。你可以使用null safe你可以使用null safe