2011-02-02 7 views
4

私はジャージーと長いの配列を渡すしようとしています:REST - Jerseyでパラメータのlongの配列を渡すには?

クライアント側では、私はそのような何かしようとしています

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

はそのようなことを実現する方法はありますか?

ありがとうございます!

答えて

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

この文字列をポストパラメータとして渡します。サーバー側では、このようにデコードします。

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

は、Iあなたの質問を誤って理解することができる。(私の以前のソリューションがまだ動作します)。しかし、通常、配列やその他の複雑なデータ構造を渡したいときは、何らかの種類のシリアライゼーションメカニズムを使用する方が良いでしょう。私は通常、コミュニケーションのためにJson形式を使用します。これがあなたが望むものなら、私に知らせてください。 –

+0

あなたの答えをありがとう。それは解決策ですが、私のリストには10​​000件以上の項目が含まれています。あなたのソリューションに問題はありますか? – Barnouille

+0

10kのエントリは非常に長い文字列になるでしょう、あなたはそれにいくつかの問題に直面するかもしれません。私はPOSTメソッドがより良いと思う – fmucar

2

あなたは、「アプリケーション/ XML」形式に固執し、JSON形式を避けたい場合は、JAXB注釈付きオブジェクトにこのデータをラップする必要があり、ジャージー内蔵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; 
} 

} 

(ジャージークライアントを使用して)

// 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); 
関連する問題