ColdFusion 10 REST API:如何让cfthrow返回带有Camel Case属性的JSON

时间:2013-04-04 19:09:59

标签: api rest exception coldfusion coldfusion-10

我正在使用ColdFusion 10的新REST API。假设我抛出这个例外:

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

ColdFusion很好地处理异常并在响应正文中返回此JSON:

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

请注意,属性“Message”和“Type”是在Pascal Case(大写首字母)中生成的。为了与我的API中的其他所有内容保持一致,我需要将属性设置为Came Case(小写首字母),如下所示:

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

知道我怎么能这样做吗?我正在寻找一种方法来调整ColdFusion生成JSON的方式,而无需手动执行cfcatch并自己生成JSON。

2 个答案:

答案 0 :(得分:3)

如果您正在使用带有ColdFusion的IIS,这里可以解决此问题,而无需使用<cfcatch>并在每个API端点上滚动您自己的响应(这真的很痛苦)。

我在.NET中编写了一个HttpModule,用于访问IIS&#39;响应管道修改ColdFusion返回的响应。只有在响应内容类型为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

然后你想把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"}

如果你想知道我是如何创建这个HttpModule的,可以在这里找到源代码:

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

在这里:

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

答案 1 :(得分:1)

<cfcatch>它并返回您自己的自定义JSON字符串,该字符串是根据异常的消息和详细信息构建的。

我不认为你可以调整它,除非你有Adobe的来源。 :)