私はRails 5を使用していますが、APIに対する無効なJSONリクエストのエラー処理を改善しようとしています。ラックミドルウェアで無効なJSON解析エラーをキャッチ
コントローラでレスキューを解析して無効な形式のJSONを処理しようとしましたが、ユーザがコンテンツヘッダをリクエストヘッダに追加した場合、Railsミドルウェアがコントローラにヒットする前にJSON要求を解析しています。
.rbenv /バージョン/ 2.3.1/libに/ルビー/宝石/ 2.3:サーバを起動するときに、私は次のエラーを取得する、しかし https://robots.thoughtbot.com/catching-json-parse-errors-with-custom-middleware
:
は、私は、以下のガイドに従っ0.0 /宝石/ actionpack-5.0.0.1/libに/ action_dispatch /ミドルウェア/ stack.rb:108: `assert_index '内:前に挿入する、そのようなミドルウェア:ActionDispatch :: ParamsParser(例外RuntimeError)今
、これが意味することは、ActionD ispatch :: ParamsParserは実行されていません。私は、Rails 5では廃止されているので、そのオプションを除外していると思います。
私も自分のAPIコントローラでrescue_fromを使用しようとしました:
rescue_from JSON::ParserError, with: :json_error
def json_error
render status: 400, json: {error: "Invalid JSON format in request body"}, status: :unprocessable_entity
end
しかし、これもうまくいきませんでした。それは過去をスキップするようです。
または私はこのしようとした場合:
rescue_from JSON::ParserError, with: json_error
def json_error
render status: 400, json: {error: "Invalid JSON format in request body"}, status: :unprocessable_entity
end
を私が手:
undefined local variable or method `json_error' for Api::ApiController:Class
actionpack (5.0.0.1) lib/action_dispatch/routing/route_set.rb, line 46
``` ruby
41 private
42
43 def controller(req)
44 req.controller_class
45 rescue NameError => e
> 46 raise ActionController::RoutingError, e.message, e.backtrace
47 end
48
49 def dispatch(controller, action, req, res)
50 controller.dispatch(action, req, res)
51 end
は非常に失われたガイドは、いくつかのガイダンス
あなたがプロジェクトに 'アプリ/ミドルウェア/ catch_json_parse_errors.rb'を追加しましたか?それよりも、 'app/middleware'はあなたのアプリケーションの' autoload_paths'にあるべきです。 – 0xd
はい、ファイルを追加しました。エラーは、私のクラスではなくActionDispatch :: ParamsParserに関連しています – pronoob