JerseyでPost時のパラメータを取得するには、普段は@FormParamを利用します。
が、既存のライブラリを利用する際に、HttpServletRequest.getParameter, getParameterMap
を通して取得したい場合があります。
ただ、Jerseyの仕様でgetParameterはnullが返ってきます。
(内部のinputstreamがなくなっているからとか)
その場合には手段がいくつかあります。
1.filterを利用する
2.ServletContainerをextendsする
追記(2014/04/15): jetty 9あたリから@Injectを利用した方法があるようです要調査上記を利用して@FormParam生成前に内部的にparameterを保持しておく
という案がありますが、資料なさ過ぎて私にはむりです。
そこでとりあえず
3.@Consumesを使ってFormデータを直接受け取る
を利用して既存ライブラリのほう
を修正しました。Postは
"application/x-www-form-urlencoded"のcontent-typeでデータを渡してくるので @POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void post(MultivaluedMap formParams) { …
というふうにデータ取得ができます。でこれをHttpServletRequestのgetPrameterに詰め込めればいいのですがあきらめ。既存ライブラリでgetParameterする際にデータを結合しました。
0 件のコメント:
コメントを投稿