【Java/Spring Boot】POSTリクエストのRequestBodyをJSON文字列で取得しつつバリデーションする方法(ストリーム再読み込み問題の解決)

postリクエストが来た時のrequestbody(入力データ)をjson文字列として取得し、バリデーションチェックを実装したい。

requestbodyを取得し⇨getInputStreamでストリームを取得⇨json文字列化できるが、問題点がある。

getInputStreamでストリームを取得することでこの後にコントローラが実行される際にgetReaderでストリームを読み取れずにエラーとなる。

以下エラーコード

これは、ストリームは一度読み取るとストリームが閉じられ、再度読み取るとエラーになってしまうためである。

以下リクエストボディを取得し、JSON文字列化するコード

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { BufferedReader reader = request.getReader(); Stream<String> lines = reader.lines(); String result = lines.collect(Collectors.joining(“\r\n”)); }

引用:https://qiita.com/alpha_pz/items/a8e84292dce1da6079dc

requestbodyを複数回読み取る方法だが、今回はフィルターでリクエストをラップし、コントローラーでラップしたリクエストを際読み込みする方法をとった。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

tibiyaのアバター tibiya ITエンジニア

文系卒あほエンジニア
趣味はゲームとギャンブルとテニスっぽいスポーツと釣りです
Java javascript angular react C#

コメント

コメントする

目次