如何在Mule中从ApiKit映射中检索statusCode

如何在Mule中从ApiKit映射中检索statusCode,mule,mule-component,anypoint-studio,Mule,Mule Component,Anypoint Studio,我们希望在异常策略中使用相同的过程来处理我们捕获的所有异常。它是由apikit生成的。我们首先使用自定义组件发送大量数据,然后生成json响应。在DataWeave的响应中,我们希望设置相同的状态码。但是,statusCode似乎不是一个可检索的变量。我是对的,还是有一个很好的方法来检索它 很好 如果使用http.status创建变量,则可以在映射程序中使用它: <flow name="test"> <set-variable variableName="

我们希望在异常策略中使用相同的过程来处理我们捕获的所有异常。它是由apikit生成的。我们首先使用自定义组件发送大量数据,然后生成json响应。在DataWeave的响应中,我们希望设置相同的状态码。但是,statusCode似乎不是一个可检索的变量。我是对的,还是有一个很好的方法来检索它


很好

如果使用http.status创建变量,则可以在映射程序中使用它:

 <flow name="test">
        <set-variable variableName="httpStatus" value="#[message.inboundProperties['http.status']" doc:name="Variable"/>
        <dw:transform-message doc:name="Transform Message">
            <dw:set-payload><![CDATA[%dw 1.0
%output application/json

---
{ 
  status : flowVars.httpStatus,
  message : payload,
  code : 42,
  more_info :"https://anypoint.mulesoft.com/apiplatform/nordic-choice-hotels"
}]]></dw:set-payload>
        </dw:transform-message>
    </flow>

很好

如果使用http.status创建变量,则可以在映射程序中使用它:

 <flow name="test">
        <set-variable variableName="httpStatus" value="#[message.inboundProperties['http.status']" doc:name="Variable"/>
        <dw:transform-message doc:name="Transform Message">
            <dw:set-payload><![CDATA[%dw 1.0
%output application/json

---
{ 
  status : flowVars.httpStatus,
  message : payload,
  code : 42,
  more_info :"https://anypoint.mulesoft.com/apiplatform/nordic-choice-hotels"
}]]></dw:set-payload>
        </dw:transform-message>
    </flow>

APIKITEExceptionStrategy中定义的状态代码将是那些在响应头中作为http.Status发送回来的代码,给出了相应的要引发的异常。 比如说,

<apikit:mapping statusCode="504">
        <apikit:exception value="org.mule.api.transformer.TransformerMessagingException"/>
        <flow-ref name="svc0031_manageErrors" doc:name="Manage Error"/>
    </apikit:mapping>

这意味着,当org.mule.api.transformer.TransformerMessageException异常被该异常块抛出并捕获时,504状态代码将作为响应头发回。 如果您想绕过APIKit异常块中的statusCode属性,那么应该有另一个exceptionStrategy块来捕获所需的异常,然后您可以这样设置状态代码

<set-property name="http.status" value="<the_desired_status, e.g. 401>" />

希望能有帮助


/Tony

APIKITEExceptionsStrategy中定义的状态代码将是那些在响应头中作为http.Status发回的代码,因为相应的异常将被引发。 比如说,

<apikit:mapping statusCode="504">
        <apikit:exception value="org.mule.api.transformer.TransformerMessagingException"/>
        <flow-ref name="svc0031_manageErrors" doc:name="Manage Error"/>
    </apikit:mapping>

这意味着,当org.mule.api.transformer.TransformerMessageException异常被该异常块抛出并捕获时,504状态代码将作为响应头发回。 如果您想绕过APIKit异常块中的statusCode属性,那么应该有另一个exceptionStrategy块来捕获所需的异常,然后您可以这样设置状态代码

<set-property name="http.status" value="<the_desired_status, e.g. 401>" />

希望能有帮助


/Tony

多亏了

他的回答几乎是正确的,但是,状态码不是存储在message.inboundProperties['http.status']中,而是存储在message.outboundProperties['http.status']中。甚至不需要提取变量,只需在data transformer中直接访问变量,如下所示:


多亏了

他的回答几乎是正确的,但是,状态码不是存储在message.inboundProperties['http.status']中,而是存储在message.outboundProperties['http.status']中。甚至不需要提取变量,只需在data transformer中直接访问变量,如下所示:


好的斯坦尼斯拉夫·伊万诺夫

我用APIKit实现了一个流,这是我附加的代码,并且inboundProperties http.status中是否有属性,请检查它,因为如果它应该包含值,如果您没有,您的流可能会在上一步中修改该值

我让他直接在地图绘制程序中访问outboundProperties,我不知道,非常感谢。

好的Stanislav Ivanov

我用APIKit实现了一个流,这是我附加的代码,并且inboundProperties http.status中是否有属性,请检查它,因为如果它应该包含值,如果您没有,您的流可能会在上一步中修改该值


我让他直接访问mapper中的outboundProperties,我不知道,非常感谢。

谢谢你的建议,但是apikit:mapping statusCode=“value”没有在消息中传递。inboundProperties['http.status']因此以后不能在流中使用。尽管你几乎是对的,请检查我的答案。再次感谢!感谢您的建议,但消息中未传递apikit:mapping statusCode=“value”。inboundProperties['http.status']因此以后无法在流中使用。您几乎是对的,请检查我的答案。再次感谢!如果有帮助,我很高兴!谢谢,祝你周末愉快!如果有帮助,我很高兴!谢谢,祝你周末愉快!