0

我正在使用 Apache Wink 来实现 REST 服务,但我似乎无法接收数组或列表类型的参数。调用来自 ajax $.post:

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

在服务器端,Strings和ints被正确接收,但是'param'参数总是被接收为空(不是null,而是有零个元素),变量是否定义为String[], List, Set, ...。接收函数定义为:

@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 回答