ColdFusion 10:使用新的REST API处理和记录错误



我正在使用ColdFusion 10的新REST API:http://www.adobe.com/devnet/coldfusion/articles/restful-web-services.html

每当出现异常时,API都会很好地处理它,并自动返回如下内容:

HTTP/1.1 500 Internal Server Error
Content-Length: 52
Content-Type: application/json
Date: Fri, 22 Feb 2013 01:07:49 GMT
{"Message":"Element FOO is undefined in ARGUMENTS."}

问题是以下两个都没有被调用:

  • 站点范围的错误处理程序
  • Application.cfc的onError

看起来REST API处理了错误,并且异常不会出现。每当服务器端出现错误时,我都会给自己发一封电子邮件(包含错误详细信息)。关于如何使用新的REST API,有什么想法吗?

这并不理想,但您可以在每个方法中添加一个try/catch,该方法在出现错误时向您发送电子邮件,然后重新抛出。

站点范围的错误处理程序与REST服务一起工作。在调用REST服务时,用户可以指定"Accept"标头。如果用户将accept标头指定为xml或json,则会捕获错误,并将包含错误代码和消息的结构序列化为适当的格式。在这种情况下,不会调用站点范围的错误处理程序。用JSON或XML发送整个HTML内容是不好的。但是,如果请求的内容类型是text/html,则会调用站点范围的处理程序,并将html作为响应返回。

我不确定你使用什么来消费web服务,但假设它是ColdFusion,你可以使用cfhttp及其throwonwerror属性:

<cftry>
    <cfhttp
        url="http://localhost:8500/rest/restapp/crudService/1"
        method="get"
        timeout="5"
        throwonerror="yes" />
    <cfcatch type="Any">
        <!--- email yourself the error details --->
    </cfcatch>
</cftry>

这样,您就可以使用cfcatch捕获返回的500个错误,然后通过电子邮件向自己发送cfcatch转储(或者您可以通过电子邮件发送错误详细信息)。

这是固定的,但仅在CF11中可用。

报价:

这在最新的ColdFusion11版本中得到了修复。

--Hari Krishna Kallae

https://bugbase.adobe.com/index.cfm?event=bug&id=3506757

更新

CF10的修补程序将在下一次更新中提供(目标为2014年8月中旬)

最新更新