2013-03-29 46 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的詳細博客文章。我希望它對於遇到同樣問題的其他人來說是一個有用的工具。 –

相關問題