1

我正在使用 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。

4

2 回答 2

3

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

我在 .NET 中编写了一个 HttpModule,它利用 IIS 的响应管道来修改 ColdFusion 返回的响应。它只会在响应 Content-Type 是application/json且状态码不以 a 开头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

于 2013-04-05T00:58:58.363 回答
1

<cfcatch>它并返回您自己的自定义 JSON 字符串,该字符串由异常的消息和详细信息构造而成。

我不认为你可以调整它,除非你有来自 Adob​​e 的源代码。:)

于 2013-04-04T21:22:24.917 回答