ColdFusion REST 服务不允许在状态代码为 4xx 时以"content"格式发送回结构



我正在使用CF REST服务,当请求者提交的数据未通过我们的内部验证检查时,我们希望发回详细的错误结构。我使用setRestResponse来操纵状态码(在所有帐户上都能正常工作)。然而,当有人验证失败时,我想用400或401发送一个结构返回给用户。我的研究使我把结构放在"内容"中。我的返回结构的一部分setRestResponse然而,当我这样做,我得到正确的状态代码,但不是错误细节的JSON结构。

我观察到的一件事是我的api似乎返回HTML,即使我已经设置了"produces"我的函数属性为"application/json"我还将函数设置为无效,因为我们正在使用setRestResponse。你能帮我弄清楚如何发送一个400错误的错误细节结构吗?除了我已经做过的事情之外,究竟需要发生什么才能使API响应JSON ?

我在下面包含了一段代码:

<cfif IsDefined('val_check_fail')>
<!---The val_check returned an error.  Stop processing and return a REST error--->
<cfscript>
error_struct = StructNew();
error_struct.errorText = val_check;
error_struct.errorCode = 3254;
out_struct = serializeJSON(error_struct);
</cfscript>

<cfset response.status = 400/>
<cfset response.content =  #out_struct#/>
<Cfset pyld = response/>

<cfelse> 
<cfscript>
ins_payload = invoke(val_obj, 'insert_payload', {value_string:#insert_value_list#,col_string:#insert_list#});
</cfscript>
<cfscript>
success_struct = StructNew();
success_struct.message =  "Validated and Accepted For: " & #arguments.messageID#;

out_struct = serializeJSON(success_struct);
</cfscript>
<cfset response.status =200>
<cfset response.content = #out_struct#> 
<cfset pyld = response/>
</cfif>


<cfscript>
restSetResponse( pyld );
</cfscript>

您能给我们举一个您看到的实际输出的例子吗?

我在你的代码中注意到一件事…既然你已经设置了CF"产品";将函数属性设置为"application/json"然后,您不必担心函数中数据的任何序列化。CF会为你做的。但是,您正在像这样序列化您的输出:

out_struct = serializeJSON(error_struct);

这看起来是不必要的,但我需要更好地了解你在做什么和你想要做什么。

最新更新