2012年12月6日木曜日

Jersey の HttpServletRequest.getParameter仕様

Jerseyの開発でつまづいたので共有

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