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

时间:2013-03-29 20:56:36

标签: rest coldfusion coldfusion-10

我使用的是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." />

返回类型为&#34; struct&#34;时返回格式正确的JSON:

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

{"Message":"Validation error."}

但是当返回类型是&#34; void&#34; (这是使用RestSetResponse()所必需的,响应是一些丑陋的HTML响应。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

我唯一可以通过解决您的情况来思考的是使用其中的错误详细信息滚动您自己的结构,然后将其用作content的{​​{1}}值集调用

这有点偷工减料,但在这个例子中,你受到了ColdFusion的杰出建构的限制,我认为。

logged a bug与此有关。