mule - DataWeave 2 中的空检查
问题描述
我的网址中有一个婴儿车,并在 DW 中用作:
<set-variable value=" #[output application/java --- ( (attributes.queryParams.filePath startsWith ('/opt/mypath/')))] .../>
如果我没有通过任何参数,我会收到以下异常:
Message : "You called the function 'startsWith' with these arguments:
1: Null (null)
2: String ("/opt/mypath/")
But it expects arguments of these types:
1: String
2: String
1| output application/java --- ( (attributes.queryParams.filePath startsWith ('/opt/mypath/')))
1)如何验证null?
2)如果没有传递参数,那么我想返回给用户提供参数并避免进一步的流动。是否可以在 DataWeave 中返回?还是我需要使用标准的 Groovy 脚本才能返回?
解决方案
您可以使用条件逻辑来防止空输入,如下所示:
if (attributes.queryParams.filePath != null) (attributes.queryParams.filePath startsWith '/opt/mypath/') else null
如果您还需要防止空字符串,我会使用isEmpty
:
if (isEmpty(attributes.queryParams.filePath)) null else (attributes.queryParams.filePath startsWith '/opt/mypath/')
但是,如果您事先验证它attributes.queryParams.filePath
不为空,则 DataWeave 代码会更简单。这是整个事情。如果查询参数为空,这将停止整个流程并返回错误:
<flow name="flow" doc:id="d891a730-794d-4ca5-b6d9-dd00238d89ba" >
<http:listener doc:name="Listener" doc:id="a1cadeb8-d589-436c-8342-c13e065e4618" config-ref="HTTP_Listener_config" path="/test"/>
<validation:is-not-null doc:name="Is not null" doc:id="66577b65-ba8d-4954-b3e7-e598310773ea" value="#[attributes.queryParams.filePath]" message='"filePath" must be included in the query parameters'/>
<set-variable value="#[attributes.queryParams.filePath]" doc:name="Set Variable" doc:id="68511ea5-25cf-465f-ad89-c33a83ab83ec" variableName="filePath"/>
<error-handler>
<on-error-propagate enableNotifications="true" logException="true" doc:name="On Error Propagate" doc:id="ac12ae39-c388-4204-b1b1-b8c42aefcd66" >
<ee:transform doc:name="Transform Message" doc:id="da695971-3ca4-435e-a4cd-b19fdd431bd6" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
error.description
]]></ee:set-payload>
</ee:message>
</ee:transform>
</on-error-propagate>
</error-handler>
</flow>
推荐阅读
- c++ - 错误:我的 vscode 终端上的“int”之前的预期主表达式
- css - 在 li 元素内具有 flex 属性的中心锚元素
- r - 根据每门课程的名额和学生排名分配愿望
- rust - 将上下文移动到几个闭包中?
- angular - 你可以转换 switchMap observable 的结果来获取它的值而不是 observable 本身吗?
- python - 使用 .loc 通过索引从另一个数据帧中分配值返回: ValueError: Must have equal len keys and value when setting with an iterable
- javascript - 在 JS 中访问父对象的正确方法是什么?
- python - VScode Jupyter 无法连接到我的 venv python3 内核
- flutter - 如何在android studio中接受证书
- python - 如何使用最快的方法对数据框进行分组并将列生成为数字序列?