【问题标题】:@FormParam only receives empty list/array (Apache Wink)@FormParam 只接收空列表/数组(Apache Wink)
【发布时间】:2012-03-26 09:07:11
【问题描述】:

我正在使用 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, ..',没有索引。不知道这是否正确。

有什么想法吗?

【问题讨论】:

    标签: rest apache-wink


    【解决方案1】:

    我意识到这是一个老问题,但我遇到了类似的问题,我最终通过在 FormParam 名称的末尾添加 [] 来解决它。

    因此,您将拥有@FormParam("param[]"),而不是@FormParam("param")

    请注意,我也在使用 jQuery 的 $.params 方法来序列化我的数据,但我看起来你的调试显示了一个正确编码的表单字符串,所以我怀疑它只是缺少 []。

    【讨论】:

      【解决方案2】:

      当我将接受变量定义为时,这对我有用:

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

      您可能还需要调整客户端调用,例如:

      $.post(url,
          {   paramName: "string1", 
          {   paramName: "string2",
          {   paramName: "string3",
              str2: "str2"},
          function(data) {// do something     
      });
      

      【讨论】:

      • 那里有一些语法问题。但是使用 data {x: "string1", x:"string2", x:"string3", str: "str"} 和 List 声明,列表仅获得 1 个元素(最后一个)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-21
      • 1970-01-01
      • 2016-05-05
      相关资源
      最近更新 更多