3

Ubuntu 12.04でレール3.2.8を使用しています

json のみをサポートする Web サービスを構築しています。誰かが json ではなく content-type を application/json に設定したデータを送ってきた場合、Rails アプリケーションは例外を発生させ、500 (内部サーバー エラー) を返します。

この例外は、コントローラ アクションが呼び出される前にレール内で発生します。これは、レールが params 構造を作成し、受信データを JSON として解析しようとするためです。

これが正しい行動かどうかはわかりません。例外を救出し、特別なハンドラーまたは変数セットを使用したアクション内で通知してくれればよかったのにと思います。415 (サポートされていないメディア タイプ) または 422 (処理不能なエンティティ) を示したいと思います。私の推測では、この場合は 422 の方が適切です。

これをどのように達成できるかについてのアイデアはありますか?

4

1 に答える 1

1

ミドルウェアを少し変更する必要があると思います。カスタムミドルウェアを作成しての前ParamsParserに挿入するか、をオーバーライドしますParamsParser

このリクエストParamsParserを見てください。オーバーライドのサンプルがあります。

カスタムミドルベールを作成することには別の利点があります。データはあるjsonがコンテンツタイプがそうでないapplication/json場合は、ここで修正できます()。

于 2013-01-29T10:22:13.830 に答える