【问题标题】:Mule Dataweave - How to set http.statusMule Dataweave - 如何设置 http.status
【发布时间】:2015-10-24 14:34:29
【问题描述】:

我想在 Dataweave 转换中设置 http.status 代码。为此,我使用以下代码在Outbound Property 选项卡上设置http.status

出站属性 ===> http.status

%dw 1.0
%output application/java
---
"404" when payload[0] == null
otherwise "200"

但即使有效载荷为空也不会反映。有什么建议吗?

编辑:

这里是完整的 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>

【问题讨论】:

    标签: mule dataweave


    【解决方案1】:

    编辑。

    这是因为 dataweave 脚本的第一部分将负载覆盖到 JSON。因此,当您在 set-property dw 脚本中使用 sizeOf 时,它实际上是在对不为 0 的 JSON 字符串执行 sizeOf。

    为了完成这项工作,我可能会将原始有效负载存储在 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

    【讨论】:

    • 我复制了你的代码并在本地执行,对我来说是 200 :(
    • 只使用那个准确的代码? curl -v -X GET 'localhost:8085/test' 你能发布你正在使用的完整配置吗?以及哪个 http 客户端?
    • 你能看看编辑吗
    • 好的,我重新创建了您的问题并发布了对您问题的更新答案。
    【解决方案2】:

    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"

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      • 2016-01-21
      • 2020-04-13
      相关资源
      最近更新 更多