如何为mule中的4xx和5xx错误创建全局异常处理?

时间:2017-02-10 10:38:15

标签: exception exception-handling mule anypoint-studio apikit

我正在使用Anypoint 6.1和Mule 3.8.1,我正在寻找API工具包创建的全局异常处理的额外错误处理。

我想补充一下:

  • 408请求超时
  • 429请求太多
  • 500内部服务器错误
  • 503服务不可用

处理这些错误的最佳方法是什么?

我已经看过使用API​​ Kit异常处理,但我找不到用于上述的预期类型。有谁知道我在哪里可以找到用于这些错误的预期类型?

XML API工具包异常映射:

<apikit:mapping-exception-strategy name="apiKitGlobalExceptionMapping">
    <apikit:mapping statusCode="400">
        <apikit:exception value="org.mule.module.apikit.exception.BadRequestException" />
        <set-property propertyName="Content-Type" value="application/json" doc:name="Property"/>
        <set-payload value="{ &quot;message&quot;: &quot;Bad request&quot; }" doc:name="Set Payload"/>
    </apikit:mapping>      
    <apikit:mapping statusCode="404">
        <apikit:exception value="org.mule.module.apikit.exception.NotFoundException" />
        <set-property propertyName="Content-Type" value="application/json" doc:name="Property"/>
        <set-payload value="{ &quot;message&quot;: &quot;Resource not found&quot; }" doc:name="Set Payload"/>
    </apikit:mapping>
    <apikit:mapping statusCode="405">
        <apikit:exception value="org.mule.module.apikit.exception.MethodNotAllowedException" />
        <set-property propertyName="Content-Type" value="application/json" doc:name="Property"/>
        <set-payload value="{ &quot;message&quot;: &quot;Method not allowed&quot; }" doc:name="Set Payload"/>
    </apikit:mapping>
    <apikit:mapping statusCode="406">
        <apikit:exception value="org.mule.module.apikit.exception.NotAcceptableException" />
        <set-property propertyName="Content-Type" value="application/json" doc:name="Property"/>
        <set-payload value="{ &quot;message&quot;: &quot;Not Acceptable&quot; }" doc:name="Set Payload"/>
    </apikit:mapping>    
    <apikit:mapping statusCode="408">
        <apikit:exception value="java.util.concurrent.TimeoutException"/>
        <set-property propertyName="Content-Type" value="application/json" doc:name="Property"/>
        <set-payload value="{ &quot;message&quot;: &quot;Request Timeout&quot; }" doc:name="Set Payload"/>
    </apikit:mapping>  
    <apikit:mapping statusCode="415">
        <apikit:exception value="org.mule.module.apikit.exception.UnsupportedMediaTypeException" />
        <set-property propertyName="Content-Type" value="application/json" doc:name="Property"/>
        <set-payload value="{ &quot;message&quot;: &quot;Unsupported media type&quot; }" doc:name="Set Payload"/>
    </apikit:mapping>  
    <apikit:mapping statusCode="429">
        <apikit:exception value="java.lang.Exception"/>
        <set-property propertyName="Content-Type" value="application/json" doc:name="Property"/>
        <set-payload value="{ &quot;message&quot;: &quot;Unsupported media type&quot; }" doc:name="Set Payload"/>
    </apikit:mapping>  
    <apikit:mapping statusCode="500">
        <apikit:exception value="java.lang.Exception"/>
        <set-property propertyName="Content-Type" value="application/json" doc:name="Property"/>
        <set-payload value="{ &quot;message&quot;: &quot;Unsupported media type&quot; }" doc:name="Set Payload"/>
    </apikit:mapping>  
    <apikit:mapping statusCode="503">
        <apikit:exception value="java.lang.Exception"/>
        <set-property propertyName="Content-Type" value="application/json" doc:name="Property"/>
        <set-payload value="{ &quot;message&quot;: &quot;Unsupported media type&quot; }" doc:name="Set Payload"/>
    </apikit:mapping>          
</apikit:mapping-exception-strategy>

由于

1 个答案:

答案 0 :(得分:0)

APIKIT根据定义的apikit:exception值匹配异常。因此,对于定义的异常类,状态代码应为1:1。在您的情况下,如果要设置500,则仅在异常与org.mule.module.apikit.exception.InternalServerErrorException

匹配时才返回