2012-05-12 6 views
0

JerseyでRootResourceとSubResourceを使用しているときに、このようにRootResourceに注釈を付けて、フォームパラメータparam1を受け取りました。JerseyのRootResourceからすべてのpostパラメータを取得する

@Path("some/path") 
public SubResource doSomething(@FormParam("param1") String param1) { 
... 
} 

すべては私が期待したとおりに機能しましたが、パラメータが指定されていない場合、ジャージーは内部エラーステータスコード(500)を返します。一般的には、これは悪い要求(400)程度のものでなければならないと言います。私は自分のためにフォームパラメータを処理できる必要があります。この場合、

@Path("some/path") 
public SubResource doSomething(MultivaluedMap<String, String> form) { 
... 
} 

を、しかし:私はその後、実行しようとしました何

私はパラメータリストにMultivaluedMap<String, String> formを追加、である(Jersey User Guide例2.19を参照してください) formが入力されませんでした。 @POSTアノテーションがないためでしょう。

私の質問:あなたが私の投稿パラメータを得るために、私はイライラするHttpServletRequestを処理する以外にも、方法を知っていますか?あなたの助けのための

おかげで...

+0

サブパラメータではなく、サブリソースロケータにフォームパラメータを渡す特別な理由はありますか自分自身を食べる? – Perception

+0

あなたの質問を理解できないかもしれませんが、サブリソースロケータにパラメータを渡していません。コードスニペットは同じメソッドを表し、単に変更されています。 – Stefan

答えて

0

は、私はあなたが達成しようとしているか全くわからないんだけど、あなたの例のどれも私には有効なようではありません。あなたはサブリソースに処理を渡そうとしているので、ルートリソースではなく、そこにあるパラメータを本当に扱うべきです。相続人例:

@Path("/root/path") 
public class RootResource { 
    @Path("/sub/path") 
    public SubResource doSomething() { 
     // return an instance of your sub resource 
    } 
} 

@Produces(MediaType.TEXT_XML, MediaType.APPLICATION_JSON) 
public class SubResource { 
    @GET 
    @Path("/") 
    public Collection<SomeBean> getAll() {} 

    @GET 
    @Path("/{id} 
    public SomeBean getSingle() {} 

    @POST 
    @Path("/") 
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
    public SomeBean reallyDoSomething(@FormParam("param1") final String param) { 
     // do ... something 
    } 
} 

EDIT

あなたは、サブリソースを初期化するために、フォームパラメータにアクセスする必要がある場合は、HTTPサーブレットの要求を介してアクセス:

public class RootResource { 
    @Context 
    private HttpServletRequest request; 

    @Path("/sub/path") 
    public SubResource doSomething() { 
     final Map<String, String> params = request.getParameterMap(); 
     // process the parameters 
     // return an instance of your sub resource 
    } 
} 
+0

さて、もう少し私の意図をクリアしたはずです。私の場合、それはすべて一般化に関するものです。 'private Date created;という属性を持つ一般的なイベントクラスと、RootResourceのフォームパラメータで塗りつぶす別の属性' private String eventType; 'を持っています。その後、イベントオブジェクトをSubResourceに渡して、他のフォームパラメータが再生される特定の派生イベントオブジェクトを処理します。 – Stefan

+0

私が言っていることは、ジャージーには欠落しているフォームパラメータのステータスコード500を返すことは望ましくないということです。だから私は一般的なイベントオブジェクトの一般的なフォームデータを処理するRootResourceのフォームパラメータのリストが必要です。 – Stefan

+0

ジャージーは、欠落しているすべてのパラメーターについてヌルをデシリアライズします。あなたのプログラムでこれらの値がnullである可能性があるケースを処理していますか? – Perception

関連する問題