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

Joh*_*ika 6 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." />
Run Code Online (Sandbox Code Playgroud)

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

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

{"Message":"Validation error."}
Run Code Online (Sandbox Code Playgroud)

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

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

<cfheader statusCode="201" statusText="Created" />
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*ron 1

我看不出为什么restSetResponse()应该要求 void 返回类型的充分理由,但已验证如果不是这种情况,它会被忽略。这有点垃圾。

我唯一能想到的解决您的情况的方法是滚动您自己的结构,其中包含错误详细信息,然后将其用content作为restSetResponse()

这有点偷工减料,但我认为在这种情况下,您会受到 ColdFusion 偷工减料的限制。

我已经记录了与此相关的错误。