- ベストアンサー
Rails4でJSONのParseErrorを判定
Ruby on Rails 4 で Rest 形式で Web API の開発しています。 クライアントからくる Request の JSON に構文エラーがあるか判定したいのですが 構文エラーがあると ActionDispatch::ParamsParser::ParseError 上記のエラーが、コントローラに来る前に発生してしまうので、エラーの判定ができません。 どうすればプログラム上で上記のエラーが起こったか判定することができるでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
申し訳ありません。 #1は、呼び出し関係がわからなかったので、構文チェックをするメソッドを提供すればいかがでしょうか、という提案をさせていただいたものです。JSONファイルを指定する前に構文チェックをして、OKのものだけ指定する。ということをイメージしておりました。 (話変わりまして、) 以下のURLが該当しそうです。 https://gist.github.com/elarkin/4709748
その他の回答 (1)
- hirotn
- ベストアンサー率59% (147/246)
http://minamirb.github.io/rails_beginners_lesson/upgrading-from3.2-to4.0/ Rails 4.0 では、ParamsParser がリクエストパラメータのパースに失敗した場合に、ActionDispatch::ParamsParser::ParseError を継承した例外があがります。より下位の、例えば MultiJson::DecodeError の代わりに、この例外を rescue してもよいです。 だそうなので、以下のURLを参考にしてParseErrorもrescueする形にして、構文チェック用のメソッドを提供するのはどうでしょうか。 https://www.ruby-forum.com/topic/136579
補足
回答ありがとうございます。 ですが、上記のURLを確認したのですが、 parse を明示的にやっているようですが、 どこに設定すればいいのでしょうか? 現状ではHTTP の通信が届くと、最初にURLのアクションに指定したコントローラの関数が実行されていますが、 コントローラより前に処理を実行するには、どこに記述すればよいのでしょうか?
お礼
回答ありがとうございます。 ttp://stackoverflow.com/questions/15459143/how-to-rescue-from-actiondispatchparamsparserparseerror-in-rails-4 上記にも答えが書いてあったのですが、 Rack middleware の仕組みを理解していなかったので、 ソースをどこに配置すればいいかなど全然わからず苦労しましたが、 どうにか理解して配置し、rescue できるようになりました。 ありがとうございます。