質問: 間違ったコンテンツタイプでレールがクラッシュするのを避ける方法 私はUbuntu 12.04で3.2.8のレールを使用しています 私はjsonのみのサポートでWebサービスを構築しています。誰かが私にjson以外のデータを送信し、content-typeをapplication/jsonに設定すると、railsアプリケーションは例外を発生させ、500(内部サーバーエラー)を返します。 この例外は、railsがparams構造体を作成しようとしているときにコントローラアクションが呼び出される前に、レール内で発生し、受信データをJSONとして解析します。 私はこれが正しい行動であるとは思わない。私は、例外を救済したかどうかを知っていて、特別なハンドラや変数セットを使って自分のアクション内で私に知らせてもらいました。私は415(サポートされていないメディアタイプ)または422(未処理のエンティティ)を示したいと思います。私の推測はこの場合には422がより適切です。 どのようにこれを達成することができるかについてのアイデア?
回答: ミドルウェアを少し変更する必要があると思います。カスタムミドルウェアを作成して `ParamsParser` の前に挿入するか、 `ParamsParser` をオーバーライドします。 このリクエストを見てください。 `ParamsParser` のサンプルがあります>オーバーライド。 カスタムミドルウェアの作成には別の利点があります。データが `json` でcontent-typeが `application/json` でない場合は、ここで修正できます([例](https:// github.com/rack/rack-contrib/blob/master/lib/rack/contrib/post_body_content_type_parser.rb ))。