将列表传递给RESTful Web服务

时间:2010-07-05 20:38:59

标签: java jersey

有没有办法将列表传递给Jersey中的RESTFul Web服务方法?像@PathParam(“list”)列表一样?

3 个答案:

答案 0 :(得分:2)

希望这会对你有所帮助

Java代码

import java.util.List;

@Path("/customers")
public class CustomerResource {
    @GET
    @Produces("application/xml")
    public String getCustomers(
            @QueryParam("start") int start,
            @QueryParam("size") int size,
            @QueryParam("orderBy") List<String> orderBy) {
        // ...
    }
}

使用AJAX从javascript传递值

Ajax调用网址:/customers?orderBy=name&orderBy=address&orderBy=...

答案 1 :(得分:1)

我发现通过POST从客户端向REST服务发送列表的最佳方法是使用@FormParam
如果您向表单添加两次或更多次参数,则会在服务器端生成一个列表。

在客户端使用@FormParam方法生成com.sun.jersey.api.representation.Form并添加一些表单参数,如下所示。然后将填充的表单添加到帖子中:service.path(..) ... .post(X.class, form)(参见示例代码)。

客户端的示例代码:

public String testMethodForList() {

    Form form = new Form();
    form.add("list", "first String");
    form.add("list", "second String");
    form.add("list", "third String");

    return service
            .path("bestellung")
            .path("add")
            .type(MediaType.APPLICATION_FORM_URLENCODED)
            .accept(MediaType.TEXT_XML)
            .post(String.class, form);
}

示例 - 服务器端的代码:

@POST
@Path("/test")
@Produces(MediaType.TEXT_XML)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public String testMethodForList(       
    @FormParam("list") List<String> list {

    return "The list has " + list.size() + " entries: " 
           + list.get(0) + ", " + list.get(1) + ", " + list.get(2) +".";
}

返回字符串将是:

  

该列表有3个条目:第一个String,第二个String,第三个String。

注意:

  • 服务器端的@Consumes和客户端的.type()的MediaType 方必须与@Produces.accept()相同。

  • 您不能发送除String,Integer等以外的对象 @FormParam。如果是对象,则必须将其转换为XML 或JSON String并在服务器端重新转换它。有关如何转换,请参阅 here

  • 您也可以将List传递给form.add(someList)这样的表单,但这会产生一个包含服务器端列表条目的String。它看起来像是:[first String, second String, third String]。您必须将服务器端的字符串拆分为&#34;,&#34;并切掉方括号,从中提取单个en。

答案 2 :(得分:0)

如果我理解你要做什么,你可以序列化List对象并将其作为字符串传递。