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

コメント