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 件のコメント:
コメントを投稿