【问题标题】:REST - How to pass an array of long in parameter with Jersey?REST - 如何使用 Jersey 传递参数中的 long 数组?
【发布时间】:2011-06-20 04:00:27
【问题描述】:

我正在尝试使用 Jersey 传递一个 long 数组:

在客户端,我尝试过类似的方法:

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

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

提前致谢!

【问题讨论】:

    标签: java rest jax-ws jersey


    【解决方案1】:

    如果您想坚持“application/xml”格式并避免使用 JSON 格式,则应将此数据包装到 JAXB 注释对象中,以便 Jersey 可以使用内置的MessageBodyWriter/MessageBodyReader

    @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);
    

    【讨论】:

      【解决方案2】:

      如果您只需要传递 long 数组,则可能没有任何问题。但我可能会通过逗号分隔的字符串。 (123,233,2344,232) 然后拆分字符串并转换为长字符串。

      如果没有,我建议你使用 Json 序列化。如果您使用的是 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 参数传递。在服务器端,我会这样解码。

       Type collectionType = new TypeToken<List<Long>>() {
              } // end new
                      .getType();
              List<Long> longList = new Gson().fromJson(longString,
                      collectionType);
      

      【讨论】:

      • 可能是,我误解了你的问题。(我以前的解决方案仍然有效)。但通常当你想传递数组和其他复杂的数据结构时,最好使用某种序列化机制。我通常使用 Json 格式进行通信。让我知道,如果这是你想要的。
      • 感谢您的回答。这是一个解决方案,但我的列表可以包含超过 10000 个条目。我对你的解决方案有意见吗?
      • 10k 条目将是非常长的字符串,您可能会遇到一些问题。我认为POST方法会更好
      • 是的,你必须发帖。你用什么客户端。如果您使用的是 java 客户端,那么我建议您使用 google gson 库。我正在添加一个答案,因为我想粘贴一些代码片段。
      • 我使用了两种类型的客户端,PHP (Zend) 和 JAVA。 PHP客户端有问题吗?如果我理解这段代码应该是有效的:@POST @Consumes("application/json") @Produces("application/xml") Response getAllAgentsById(@params("listOfId") String listOfId);我可以使用gson。可以吗?对不起我的英语不好:-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 2012-04-11
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多