ColdFusion 10 REST API:如何在没有RestSetResponse()的情况下设置状态代码201

我正在使用ColdFusion 10的新内置REST API,我想返回状态代码201(已创建).我首先尝试了这里描述的RestSetResponse()方法:http://www.adobe.com/devnet/coldfusion/articles/restful-web-services.html.它运行良好,除了它强制你将函数的返回类型设置为“void”. “void”的问题在于,每当我抛出异常时,它都不再返回正确的JSON错误消息.

抛出这个例外:

<cfthrow errorcode="400" message="Validation error." />

当returntype为“struct”时,返回格式良好的JSON:

HTTP/1.1 400 Bad Request
Content-Type: application/json

{"Message":"Validation error."}

但是当返回类型为“void”(使用RestSetResponse()时需要),响应是一些丑陋的HTML响应.

因此,我不得不恢复使用returntype“struct”,放弃了RestSetResponse(),并尝试了这个:

<cfheader statusCode="201" statusText="Created" />

但它不起作用.看起来ColdFusion会覆盖statusCode,并且在成功时总是返回200(OK).任何人都知道如何将状态代码更改为201而不将函数的返回类型设置为“void”?

最佳答案
我看不出为什么restSetResponse()应该要求返回类型为void的一个很好的理由,但是如果不是这样的话,已经验证它被忽略了.哪个有点垃圾.

通过解决您的情况,我唯一可以想到的是使用其中的错误详细信息来滚动您自己的结构,然后将其用作为restSetResponse()调用设置的内容值.

这个有点偷工减料,但是我认为你在这种情况下受到了ColdFusion的jerry-built-ness的限制.

我和logged a bug有关.

转载注明原文:ColdFusion 10 REST API:如何在没有RestSetResponse()的情况下设置状态代码201 - 代码日志