我正试图通过泽西传递一个长阵列:
在客户端,我尝试过这样的事情:
@GET
@Consume("text/plain")
@Produces("application/xml)
Response getAllAgentsById(@params("listOfId") List<Long> listOfId);
有没有办法实现这样的事情?
提前致谢!
答案 0 :(得分:2)
如果你想坚持使用“application / xml”格式并避免使用JSON格式,你应该将这些数据包装到一个带注释的JAXB对象中,这样Jersey就可以使用内置的MessageBodyWriter / {{3} }。
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public ListOfIds{
private List<Long> ids;
public ListOfIds() {}
public ListOfIds(List<Long> ids) {
this.ids= ids;
}
public List<Long> getIds() {
return ids;
}
}
在客户端(使用Jersey客户端)
// get your list of Long
List<Long> list = computeListOfIds();
// wrap it in your object
ListOfIds idList = new ListOfIds(list);
Builder builder = webResource.path("/agentsIds/").type("application/xml").accept("application/xml");
ClientResponse response = builder.post(ClientResponse.class, idList);
答案 1 :(得分:0)
如果你只是需要传递一长串的数据而没有任何问题。但我可能会以逗号分隔的字符串传递长篇。 (123,233,2344,232)然后拆分字符串并转换为long。
如果没有,我建议你使用Json Serialization。如果你使用的是java客户端,那么google gson是个不错的选择。在客户端,我将编码我的列表:
List<Long> test = new ArrayList<Long>();
for (long i = 0; i < 10; i++) {
test.add(i);
}
String s = new Gson().toJson(test);
并将此字符串作为post param传递。在服务器端,我会像这样解码。
Type collectionType = new TypeToken<List<Long>>() {
} // end new
.getType();
List<Long> longList = new Gson().fromJson(longString,
collectionType);