Blog

avans 0.39.0 における @QueryParam と @BodyParam の廃止について

Avans に非互換の変更を入れます。

移行処置として、次のバージョンでは @Deprecated をつけた状態で一旦リリースします。その次のバージョンで削除します。

なにが問題か

Servlet Filter で HttpServletRequest#getParameter() を呼んでしまうと、POST で application/x-www-urlencoded または multipart/form-data の場合に content-body が読めない。

なぜ起きるか

現行の実装では HttpServletRequest#getInputStream() から POST body を自前でパースしている。Servlet Filter が getParameter() を呼んでしまうと input stream が消費され、POST body を処理できなくなる。

互換性を維持したままの解決策はないか

HttpServletRequest#getInputStream() の結果から Query parameter の値を引いたものを body parameter とするように変更することにより互換性を維持することは可能である。

互換性を維持する必要はあるか?

できれば維持したいが、そもそも query parameter と body parameter をわけて処理することに実用上の意味はないので、そこを頑張って実装してもしょうがない。

もともと分けたのは JAX-RS を意識しすぎた結果なので。。。

ついでに、、

commons-fileupload への依存を取り除き、Servlet 3.0 の upload API を利用するようにする。

移行プランについて

移行方法

移行時に留意するべき点について

File upload まわりについてはサーブレットコンテナの設定が必要な場合があるので注意。 Embedded jetty の場合には以下のように設定する。

servletHolder.getRegistration().setMultipartConfig( new MultipartConfigElement(tmpDirName));