REST - 如何使用Jersey传递一个long参数数组?

时间:2011-02-02 18:00:59

标签: java rest jax-ws jersey

我正试图通过泽西传递一个长阵列:

在客户端,我尝试过这样的事情:

@GET
@Consume("text/plain")
@Produces("application/xml)
Response getAllAgentsById(@params("listOfId") List<Long> listOfId);

有没有办法实现这样的事情?

提前致谢!

2 个答案:

答案 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);