• ベストアンサー

Rails4でJSONのParseErrorを判定

Ruby on Rails 4 で Rest 形式で Web API の開発しています。 クライアントからくる Request の JSON に構文エラーがあるか判定したいのですが 構文エラーがあると  ActionDispatch::ParamsParser::ParseError 上記のエラーが、コントローラに来る前に発生してしまうので、エラーの判定ができません。 どうすればプログラム上で上記のエラーが起こったか判定することができるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • hirotn
  • ベストアンサー率59% (147/246)
回答No.2

申し訳ありません。 #1は、呼び出し関係がわからなかったので、構文チェックをするメソッドを提供すればいかがでしょうか、という提案をさせていただいたものです。JSONファイルを指定する前に構文チェックをして、OKのものだけ指定する。ということをイメージしておりました。 (話変わりまして、) 以下のURLが該当しそうです。 https://gist.github.com/elarkin/4709748

OkamotoT
質問者

お礼

回答ありがとうございます。 ttp://stackoverflow.com/questions/15459143/how-to-rescue-from-actiondispatchparamsparserparseerror-in-rails-4 上記にも答えが書いてあったのですが、 Rack middleware の仕組みを理解していなかったので、 ソースをどこに配置すればいいかなど全然わからず苦労しましたが、 どうにか理解して配置し、rescue できるようになりました。 ありがとうございます。

その他の回答 (1)

  • hirotn
  • ベストアンサー率59% (147/246)
回答No.1

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

OkamotoT
質問者

補足

回答ありがとうございます。 ですが、上記のURLを確認したのですが、 parse を明示的にやっているようですが、 どこに設定すればいいのでしょうか? 現状ではHTTP の通信が届くと、最初にURLのアクションに指定したコントローラの関数が実行されていますが、 コントローラより前に処理を実行するには、どこに記述すればよいのでしょうか?