0

RESTサービスの実装にApacheWinkを使用していますが、配列型またはリスト型のパラメーターを受信できないようです。呼び出しはajax$.postから行われます:

$.post(url,
    {   param: ['string1', 'param2', 'x', 'etc...etc....etc'], 
        str2: "str2"},
    function(data) {// do something     
}); 

サーバー側では、Stringsとintは正しく受信されますが、変数がString []、List、Set、...として定義されているかどうかに関係なく、'param'パラメーターは常に空で受信されます(nullではなく、要素はゼロです)。受信機能は次のように定義されます。

@POST @Produces("application/json") @Path("eee") 
public Response eee(@FormParam("str1") String str1, @FormParam("param") String[] param, @FormParam("str2") String str2)

デバッグ中に、次のようなテーブルエントリを持つコンテキスト変数を確認できます。

wink.formParameters=[param%5B%5D=string1,param%5B%5D=param2,param%5B%5D=x,param%5B%5D=etc...etc....etc,str2=str2]

これは、'param [] = string1、param [] = param2、..'、インデックスなしに変換されます。それが正しいかどうかわからない。

何か案は ?

4

2 に答える 2

2

これは古い質問だと思いますが、同様の問題があり、 FormParam 名の末尾に [] を追加して修正しました。

したがって、@FormParam("param") の代わりに、@FormParam("param[]") を使用します。

jQuery の $.params メソッドも使用してデータをシリアル化していることに注意してください。ただし、デバッグによって適切にエンコードされたフォーム文字列が明らかになったように見えるため、欠落しているのは [] だけであると思われます。

于 2015-07-24T16:17:58.680 に答える
-1

これは、受け入れ変数を次のように定義すると機能します。

@FormParam("paramName") List<String> paramList;

次のようにクライアント呼び出しを微調整する必要がある場合もあります。

$.post(url,
    {   paramName: "string1", 
    {   paramName: "string2",
    {   paramName: "string3",
        str2: "str2"},
    function(data) {// do something     
});
于 2012-03-29T10:21:52.650 に答える