0

Jersey で Root- および SubResource を使用しているときに、フォーム パラメーター param1 を受け取るために、このように RootResource に注釈を付けました。

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

すべてが期待どおりに機能しましたが、パラメーターが指定されていない場合、jersey は内部エラー ステータス コード (500) を返します。一般的に、これは悪いリクエスト (400) 程度であると言えます。

次に私がやろうとしたことは、MultivaluedMap<String, String> formパラメーターリストに a を追加したことです (参照: Jersey User Guide Example 2.19)

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

この場合、フォーム パラメータを自分で処理できるはずですが、form入力されませんでした。おそらく @POST アノテーションが欠落しているためです。

私の質問: イライラする HttpServletRequest を処理する以外に、投稿パラメーターを取得する方法を知っていますか?

ご協力いただきありがとうございます...

4

1 に答える 1

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
    }
}

編集

サブリソースを初期化するためにフォーム パラメータにアクセスする必要がある場合は、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
    }
}
于 2012-05-12T22:07:09.280 に答える