Mule Dataweave - 如何设置 http.status
Mule Dataweave - How to set http.status
我想在 Dataweave 转换中设置为 http.status 代码。为此,我使用以下代码在 Outbound Property
选项卡上设置 http.status
:
出站属性 ===> http.status
%dw 1.0
%output application/java
---
"404" when payload[0] == null
otherwise "200"
但是即使payload为null也不反映。有什么建议吗?
编辑:
完整的 Dataweave 代码供参考
<dw:transform-message doc:name="buildResponse">
<dw:set-payload>
<![CDATA[%dw 1.0
%input payload application/java
%output application/json
---
{
"customer": {
"id": payload[0].ID,
"name": payload[0].NAME,
"age": payload[0].AGE,
"address": {
"line1": payload[0].LINE1,
"line2": payload[0].LINE2,
"city": payload[0].CITY,
"state": payload[0].STATE,
"pincode": payload[0].PINCODE
}
}
} when (sizeOf payload) > 0
otherwise
{
"customer" : "not found"
}]]>
</dw:set-payload>
<dw:set-property propertyName="http.status">
<![CDATA[%dw 1.0
%output application/java
---
"404" when (sizeOf payload) == 0
otherwise "200"]]>
</dw:set-property>
</dw:transform-message>
编辑。
这是因为 dataweave 脚本的第一部分正在将负载覆盖到 JSON。因此,当您在 set-属性 dw 脚本中使用 sizeOf 时,它实际上是在执行 JSON 字符串的 sizeOf,该字符串不是 0.
为了完成这项工作,我可能会将原始有效负载存储在 flowVar 中,然后像这样在 dw 脚本中使用它:
<http:listener-config name="HTTP_Listener_Configuration"
host="0.0.0.0" port="8085" doc:name="HTTP Listener Configuration" />
<flow name="dataweave-testFlow">
<http:listener config-ref="HTTP_Listener_Configuration"
path="/test" doc:name="HTTP" />
<set-payload value="#[[]]" doc:name="Set Payload" />
<set-variable variableName="originalPayload" value="#[payload]"
doc:name="Variable" />
<dw:transform-message doc:name="buildResponse">
<dw:set-payload>
<![CDATA[%dw 1.0
%input payload application/java
%output application/json
---
{
"customer": {
"id": payload[0].ID,
"name": payload[0].NAME,
"age": payload[0].AGE,
"address": {
"line1": payload[0].LINE1,
"line2": payload[0].LINE2,
"city": payload[0].CITY,
"state": payload[0].STATE,
"pincode": payload[0].PINCODE
}
}
} when (sizeOf payload) > 0
otherwise
{
"customer" : "not found"
}]]>
</dw:set-payload>
<dw:set-property propertyName="http.status">
<![CDATA[%dw 1.0
%output application/java
---
"404" when (sizeOf flowVars.originalPayload) == 0
otherwise "200"]]>
</dw:set-property>
</dw:transform-message>
</flow>
我认为这是 Dataweave 的错误并在此处创建:https://www.mulesoft.org/jira/browse/MULE-9021
Ryan Carter 的回答是正确的。但是,没有将原始有效负载存储到流变量中,有一个特定的答案。
<dw:transform-message doc:name="buildResponse">
<dw:set-payload>
<![CDATA[%dw 1.0
%input payload application/java
%output application/json
---
{
"customer": {
"id": payload[0].ID,
"name": payload[0].NAME,
"age": payload[0].AGE,
"address": {
"line1": payload[0].LINE1,
"line2": payload[0].LINE2,
"city": payload[0].CITY,
"state": payload[0].STATE,
"pincode": payload[0].PINCODE
}
}
} when (sizeOf payload) > 0
otherwise
{
"customer" : "not found"
}]]>
</dw:set-payload>
<dw:set-property propertyName="http.status">
<![CDATA[%dw 1.0
%output application/java
---
"404" when payload.customer == "not found"
otherwise "200"]]>
</dw:set-property>
</dw:transform-message>
我喜欢这样:"404" when payload.customer == "not found"
我想在 Dataweave 转换中设置为 http.status 代码。为此,我使用以下代码在 Outbound Property
选项卡上设置 http.status
:
出站属性 ===> http.status
%dw 1.0
%output application/java
---
"404" when payload[0] == null
otherwise "200"
但是即使payload为null也不反映。有什么建议吗?
编辑:
完整的 Dataweave 代码供参考
<dw:transform-message doc:name="buildResponse">
<dw:set-payload>
<![CDATA[%dw 1.0
%input payload application/java
%output application/json
---
{
"customer": {
"id": payload[0].ID,
"name": payload[0].NAME,
"age": payload[0].AGE,
"address": {
"line1": payload[0].LINE1,
"line2": payload[0].LINE2,
"city": payload[0].CITY,
"state": payload[0].STATE,
"pincode": payload[0].PINCODE
}
}
} when (sizeOf payload) > 0
otherwise
{
"customer" : "not found"
}]]>
</dw:set-payload>
<dw:set-property propertyName="http.status">
<![CDATA[%dw 1.0
%output application/java
---
"404" when (sizeOf payload) == 0
otherwise "200"]]>
</dw:set-property>
</dw:transform-message>
编辑。
这是因为 dataweave 脚本的第一部分正在将负载覆盖到 JSON。因此,当您在 set-属性 dw 脚本中使用 sizeOf 时,它实际上是在执行 JSON 字符串的 sizeOf,该字符串不是 0.
为了完成这项工作,我可能会将原始有效负载存储在 flowVar 中,然后像这样在 dw 脚本中使用它:
<http:listener-config name="HTTP_Listener_Configuration"
host="0.0.0.0" port="8085" doc:name="HTTP Listener Configuration" />
<flow name="dataweave-testFlow">
<http:listener config-ref="HTTP_Listener_Configuration"
path="/test" doc:name="HTTP" />
<set-payload value="#[[]]" doc:name="Set Payload" />
<set-variable variableName="originalPayload" value="#[payload]"
doc:name="Variable" />
<dw:transform-message doc:name="buildResponse">
<dw:set-payload>
<![CDATA[%dw 1.0
%input payload application/java
%output application/json
---
{
"customer": {
"id": payload[0].ID,
"name": payload[0].NAME,
"age": payload[0].AGE,
"address": {
"line1": payload[0].LINE1,
"line2": payload[0].LINE2,
"city": payload[0].CITY,
"state": payload[0].STATE,
"pincode": payload[0].PINCODE
}
}
} when (sizeOf payload) > 0
otherwise
{
"customer" : "not found"
}]]>
</dw:set-payload>
<dw:set-property propertyName="http.status">
<![CDATA[%dw 1.0
%output application/java
---
"404" when (sizeOf flowVars.originalPayload) == 0
otherwise "200"]]>
</dw:set-property>
</dw:transform-message>
</flow>
我认为这是 Dataweave 的错误并在此处创建:https://www.mulesoft.org/jira/browse/MULE-9021
Ryan Carter 的回答是正确的。但是,没有将原始有效负载存储到流变量中,有一个特定的答案。
<dw:transform-message doc:name="buildResponse">
<dw:set-payload>
<![CDATA[%dw 1.0
%input payload application/java
%output application/json
---
{
"customer": {
"id": payload[0].ID,
"name": payload[0].NAME,
"age": payload[0].AGE,
"address": {
"line1": payload[0].LINE1,
"line2": payload[0].LINE2,
"city": payload[0].CITY,
"state": payload[0].STATE,
"pincode": payload[0].PINCODE
}
}
} when (sizeOf payload) > 0
otherwise
{
"customer" : "not found"
}]]>
</dw:set-payload>
<dw:set-property propertyName="http.status">
<![CDATA[%dw 1.0
%output application/java
---
"404" when payload.customer == "not found"
otherwise "200"]]>
</dw:set-property>
</dw:transform-message>
我喜欢这样:"404" when payload.customer == "not found"