2013-03-29 47 views
6

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

抛出此异常:

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

返回一个很好的格式化JSON当返回类型是“结构”:

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

{"Message":"Validation error."} 

但是,当返回类型为“无效”(这是需要使用RestSetResponse (),反应是一些丑陋的HTML响应

因此,我不得不恢复使用returntype“结构”,放弃RestSetResponse(),并试图这样:

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

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

+0

您不能在响应结构中指定自定义内容,如[这里]所述(http://www.adobe.com/devnet/coldfusion/articles/restful-web-services.html#articlecontentAdobe_numberedheader_3)? – imthepitts

+0

我不能那样做。正如我的问题所述,使用RestSetResponse()要求returntype是“void”,如果发生异常,它将不再尊重正确的JSON响应。 –

回答

1

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

我可以在你的情况的工作思维方式的唯一一件事就是滚你自己的结构在它的错误详细信息,然后用其作为content价值为restSetResponse()调用设置。

这是一个有点杰瑞建造的,但我认为在这种情况下,你受到ColdFusion的内置构建的约束。我的logged a bug与此相关。

+0

我很害怕这个,但我认为你是对的。 –

+0

只是供参考,如果您有兴趣,我将此问题作为博客文章的灵感来源:http://adamcameroncoldfusion.blogspot.co.uk/2013/03/restsetresponse-requires-method-to-be.html。 –

+0

感谢Adam的详细博客文章。我希望它对于遇到同样问题的其他人来说是一个有用的工具。 –

相关问题