在Mulesoft中添加自定义ErrorCode

时间:2016-07-13 14:17:36

标签: java exception mule

对于Mulesoft中的大多数错误,没有定义错误代码。如果它不知道,骡子会平面打印MULE_ERROR--2。而不是这个我想放入我自己的错误代码,它将从DB中获取并包含在异常有效负载中。在此之后,应将异常有效负载发送到处理程序流,以便根据错误代码重新提交。因此,在错误处理部分流程中,我需要有多个组件。

尝试自定义异常策略,捕获异常策略,使用Java组件和流程引用,但它们都没有工作。

另外,我为此构建了一个虚拟代码(没有获取错误代码)来放置我自己的自定义错误消息和我注意到的是,它抛出相同的错误两次,一次默认为第一次,当我第一次把我的错误消息和抛出错误。为了压制这个,我把

<AsyncLogger name="org.mule.exception.CatchMessagingExceptionStrategy" level="FATAL"/>
log4j2.xml中的

这会导致任何问题吗?

1 个答案:

答案 0 :(得分:0)

您始终可以定义自己的错误并对其进行自定义。请点击以下链接获取更多信息,

http://blogs.mulesoft.com/dev/api-dev/api-best-practices-response-handling/

以下是相同的内容:

使用HTTP状态代码

最常被滥用的HTTP状态代码之一是200 - 确定或请求成功。令人惊讶的是,您会发现许多API在创建对象时使用200(状态代码201),或者甚至在响应失败时:

invalid200

在上述情况下,如果开发人员完全依赖状态代码来查看请求是否成功,程序将继续没有意识到请求失败,并且它做错了。如果程序中存在该记录的依赖关系,则这一点尤为重要。相反,要使用的正确状态代码为400表示“错误请求”。

通过使用正确的状态代码,开发人员可以快速查看应用程序发生的情况,并对错误进行“快速检查”,而不必依赖于正文的响应。

您可以在HTTP / 1.1 RFC中找到完整的状态代码列表,但只是为了快速参考,以下是一些最常用的RESTful API状态代码:

200好

201创建

304未修改

400错误请求

401未授权

403 Forbidden

404页面/未找到资源

405方法不允许

415不支持的媒体类型

500内部服务器错误

当然,如果您觉得自己很有创意,可以随时利用状态代码: 418我是茶壶

重要的是要注意Twitter的着名的420状态代码 - Enhance Your Calm,并不是真正的标准化响应,你可能只需坚持使用状态代码429代替太多的请求。

使用描述性错误消息 同样,状态代码可帮助开发人员快速识别其呼叫结果,从而实现快速成功和失败检查。但是如果发生故障,确保开发人员了解呼叫失败的原因也很重要。这对于API的初始集成尤其重要(请记住,集成API越容易,人们使用它的可能性越大),以及出现错误或其他问题时的一般维护。

您希望您的错误正文形成良好,并且具有描述性。这意味着告诉开发人员发生了什么,为什么会发生,最重要的是 - 如何解决它。您应该避免使用通用或非描述性错误消息,例如:

redx您的请求无法完成

redx发生错误

redx无效请求

通用错误消息是API集成的最大障碍之一,因为开发人员可能会花费数小时试图弄清楚调用失败的原因,甚至错误解释错误消息的意图。最终,如果他们无法弄明白,他们可能会完全停止尝试。

例如,我用一个API努力弄清楚为什么我得到一个“不允许此调用”错误响应的约30分钟。在反复重新格式化我的请求并尝试不同的方法之后,我终于打电话给支持(非常沮丧的情绪)只是发现它是指我的访问令牌,由于我无法复制和粘贴,所以恰好是一封信。这样的事情。

同样地,“无效访问令牌”响应会让我省下很多麻烦,感觉就像一个完全白痴一样在支持的线上。它还可以节省宝贵的时间来处理真正的错误,而不是尝试解决最基本的步骤(顺便说一句 - 每当我收到错误时,密钥和令牌都是我现在检查的第一件事。)

以下是一些描述性错误消息的示例:

greencheckmark您的API密钥无效,请在http:// ...

生成有效的API密钥

greencheckmark此操作需要用户ID。在http:// ...

了解更多信息

greencheckmark您的JSON未正确形成。请参阅示例JSON:http:// ...

但你可以走得更远,记住 - 你会想告诉开发人员发生了什么,为什么会发生,以及如何解决它。最好的方法之一是使用标准化的错误格式进行响应,该格式返回代码(用于支持参考),发生的事情的描述以及指向相应文档的链接,以便他们可以了解更多/修复它: / p>

{   “错误”:{     “code”:“e3526”,     “message”:“缺少UserID”,     “description”:“用户ID是编辑用户所必需的。”,     “link”:“http://docs.mysite.com/errors/e3526/”   } }

在支持和开发方面,通过这样做,您还可以跟踪这些页面的点击,以查看哪些区域对您的用户来说更加麻烦 - 允许您提供更好的文档/构建更好的API。