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

ColdFusion 10:使用新的REST API处理和记录错误,rest,coldfusion,error-handling,coldfusion-10,Rest,Coldfusion,Error Handling,Coldfusion 10,我正在使用ColdFusion 10的新REST API: 每当出现异常时,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."} 问题是以下两项都不会被调用:

我正在使用ColdFusion 10的新REST API:

每当出现异常时,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."}
问题是以下两项都不会被调用:

  • 站点范围的错误处理程序
  • 应用程序。cfc的onError

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

我不确定您使用的是什么web服务,但假设它是ColdFusion,您可以使用cfhttp及其throwonerror属性:

<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转储发送给您自己(或者以您喜欢的方式发送错误详细信息)。

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

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

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

引述:

这在最新的ColdFusion11版本中已修复

--哈里克里希纳·卡莱

更新


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

什么消耗了web服务与问题无关-这是在客户端捕获错误,问题是如何在服务器端执行。这是一个公共API,因此许多不同的源将使用它(例如,通过JavaScript浏览器、第三方等).@PeterBoughton是正确的,我需要一个独立于消费者的解决方案。所有事情都需要在服务器上处理。提交一个错误报告?谢谢。在这里提交一个错误:是的,那会起作用,但那会很疯狂。我们使用框架的原因是我们不必做这样的事情。尽管我很难说,这是关于这不是最好的方法。我试图找到一个更好的方法:,但还是一无所获。ColdFusion再次与它自己的开发者作对。是的,CF 10的REST的这一问题和其他类似问题直接导致了一个不同的框架,即松弛。所以换句话说,站点范围的错误处理程序只有在API返回HTML时才能工作?我不知道有什么专业的perly设计了返回HTML的REST API,因此我认为这不是很有用。我认为Adobe需要尽快解决这个问题。@paul nibin在这里说的话并没有被我自己的研究所证实。请看。我承认paul是Adobe ColdFusion团队的开发人员,他完成了这项工作,但代码胜过工作头衔。