我正在使用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。
答案 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/UTF8SanitizerStream.cs
答案 1 :(得分:1)
<cfcatch>
它并返回您自己的自定义JSON字符串,该字符串是根据异常的消息和详细信息构建的。
我不认为你可以调整它,除非你有Adobe的来源。 :)