如果参数存在而没有值选择器错误,我如何在集合变量(Mule 4)内进行验证?

如果参数存在而没有值选择器错误,我如何在集合变量(Mule 4)内进行验证?,mule,mule-studio,mule-component,dataweave,mule-esb,Mule,Mule Studio,Mule Component,Dataweave,Mule Esb,我使用的是Mule 4,当有效负载是字符串而不是以下结构时,我有一个值错误选择器: {"status": 0, "content": {"status": "201",........... 我在Mule 4中使用一个set变量,给出以下值: <set-variable value="#[if (payload.content? and payload.content.status? and payload.content.status &gt;= 200) payload.co

我使用的是Mule 4,当有效负载是字符串而不是以下结构时,我有一个值错误选择器:

{"status": 0, "content": {"status": "201",...........
我在Mule 4中使用一个set变量,给出以下值:

<set-variable value="#[if (payload.content? and payload.content.status? and payload.content.status &gt;= 200) payload.content.status else 500]" doc:name="Set Status" doc:id="e9ce4fd1-9664-4401-b9a2-e47913b689af" variableName="httpStatus"/>
但有时服务器可以回答“未授权”之类的字符串,则payload.content不存在,只是一个字符串

当有效负载是字符串时,Set变量给我这个错误

"\"You called the function 'Value Selector' with these arguments: \n 1: Binary (\"Richiesta Non Autorizzata\" as Binary {encoding: \"UTF-8\", mediaType: \"text/ht...)\n 2: Name (\"content\")\n\nBut it expects one of these combinations:\n (Array, Name)\n (Array, String)\n (Date, Name)\n (DateTime, Name)\n (LocalDateTime, Name)\n (LocalTime, Name)\n (Object, Name)\n (Object, String)\n (Period, Name)\n (Time, Name)\n\n1| if (payload.content? and payload.content.status? and payload.content.status >= 200) payload.content.status else 500\n ^^^^^^^^^^^^^^^\nTrace:\n at main (line: 1, column: 5)\" evaluating expression: \"if (payload.content? and payload.content.status? and payload.content.status >= 200) payload.content.status else 500\".",

使用
payload.content.status default{}
或者您可以将其默认为字符串或其他值,以便稍后进行比较和使用

我能想到的最好方法是不检查字段是否存在检查值是否为Object,然后您可以确保
.status
正常工作

if (payload.content is Object and payload.content.status? and payload.content.status >= 200) 
    payload.content.status 
else 500
if (payload.content is Object and payload.content.status? and payload.content.status >= 200) 
    payload.content.status 
else 500