2013-04-04 33 views
1

我正在使用ColdFusion 10的新REST API。比方說,我拋出此異常:ColdFusion 10 REST API:如何讓cfthrow以Camel Case屬性返回JSON

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

ColdFusion的處理異常良好,在響應主體返回該JSON:

{"Message":"Validation error.","Type":"ValidationException"} 

注意的屬性「消息」和「類型」帕斯卡爾情況下產生的(大寫首字母)。對於這是在我的API一切一致的,我需要的屬性是來到案例(小寫首字母),如下列:

{"message":"Validation error.","type":"ValidationException"} 

任何想法,我該怎麼辦呢?我正在尋找一種方法來調整ColdFusion生成JSON的方式,而無需手動執行cfcatch並自己生成JSON。

回答

1

<cfcatch>它並返回您自己的自定義JSON字符串構造的異常的消息和細節。

我不認爲你可以調整它,除非你有來自Adobe的來源。 :)

+0

這就是我所害怕的。我越熟悉CF 10的REST API,我越是越過了內置功能。 – 2013-04-04 21:26:23

+0

我還沒有在CF10中玩過REST(我們仍然在使用CF9),但最近我聽到了很多抱怨。也許現在是時候直接去看Scala Play了。 – Henry 2013-04-04 21:34:37

3

如果您使用IIS與ColdFusion,這是一種解決此問題的方法,而不訴諸於使用<cfcatch>並在每個API端點上滾動您自己的響應(這是一個真正的痛苦)。

我在.NET中編寫了一個HttpModule,用於訪問IIS的響應管道以修改ColdFusion返回的響應。如果響應Content-Type爲application/json且狀態碼不是以2開頭(即,它不是成功的響應),則它只會干涉。所有的代碼可以在這裏找到:

https://github.com/johnnyoshika/coldfusion-rest-post-process

這裏是如何使用的HttpModule。

1)從這裏抓鬥的DLL

抓住ColdFusion.RestPostProcess.dll文件,並將其拖放到您的ColdFusion應用程序的bin文件夾:

https://github.com/johnnyoshika/coldfusion-rest-post-process/tree/master/bin/Release

例如,如果您的ColdFusion應用程序是這裏:

C:/myapp 

然後你想要t Ø在這裏把DLL:

C:/myapp/bin/ColdFusion.RestPostProcess.dll 

如果你不想相信陌生人的DLL,你需要查看源代碼和編譯在Visual Studio自己的項目生成的DLL。

2)修改的web.config

修改或創建在應用程序的根目錄下的web.config文件。內容應該是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.web> 
     <httpModules> 
      <!-- This is for IIS5, IIS6, and IIS7 Classic --> 
      <add name="JsonCamelCasePropertyConverterModule" type="ColdFusion.RestPostProcess.JsonCamelCasePropertyConverterModule"/> 
     </httpModules> 
    </system.web> 
    <system.webServer> 
     <modules> 
      <!-- This is for IIS7+ Integrated mode --> 
      <add name="JsonCamelCasePropertyConverterModule" type="ColdFusion.RestPostProcess.JsonCamelCasePropertyConverterModule"/> 
     </modules> 
    </system.webServer> 
</configuration> 

就是這樣。你的錯誤響應現在這個樣子:

{"message":"Email is invalid.","type":"ValidationException"} 

如果你想知道我是如何創造了這個HTTP模塊,源代碼可以在這裏找到:

https://github.com/johnnyoshika/coldfusion-rest-post-process/blob/master/JsonCamelCasePropertyConverterModule.cs

這裏:

https://github.com/johnnyoshika/coldfusion-rest-post-process/blob/master/UTF8SanitizerStream.cs

+0

非常酷! – Henry 2013-04-05 09:09:21

+0

同上..和偉大的指示。 +1 – Leigh 2013-04-05 20:49:54

相關問題