如何避免rails在错误的内容类型上崩溃

时间:2013-01-29 09:34:22

标签: ruby-on-rails ruby-on-rails-3.2

我在Ubuntu 12.04上使用rails 3.2.8

我正在构建一个仅支持json的Web服务。现在,如果有人向我发送的数据不是json,而是将content-type设置为application / json,则rails应用程序会引发异常并返回500(内部服务器错误)。

在调用控制器操作之前,这个异常发生在rails中,因为rails试图创建params结构并将传入数据解析为JSON。

我不确定这是正确的行为。我会更喜欢它是否拯救了异常并让我知道一些特殊的处理程序或我的行动中的一些变量集。我想指出415(不支持的媒体类型)或422(不可处理的实体)。在这种情况下,我的猜测是422更合适。

关于如何实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:1)

猜猜你需要稍微改变中间件。创建自定义中间件并在ParamsParser之前插入,或覆盖ParamsParser

看看这个request,有ParamsParser覆盖的示例。

创建自定义middlevare还有另一个优势:如果数据为json但内容类型不是application/json,则可以在此处修复(example)。