有没有办法将列表传递给Jersey中的RESTFul Web服务方法?像@PathParam(“list”)列表一样?
答案 0 :(得分:2)
希望这会对你有所帮助
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调用网址:/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()
相同。
@FormParam
。如果是对象,则必须将其转换为XML
或JSON String并在服务器端重新转换它。有关如何转换,请参阅 here 。
form.add(someList)
这样的表单,但这会产生一个包含服务器端列表条目的String。它看起来像是:[first String, second String, third String]
。您必须将服务器端的字符串拆分为&#34;,&#34;并切掉方括号,从中提取单个en。答案 2 :(得分:0)
如果我理解你要做什么,你可以序列化List对象并将其作为字符串传递。