2012-02-16 9 views
10

リストを返そうとしている間、レスポンスクラスArrayListのNo Messageボディライタが見つかりました。レスポンスクラスArrayListのメッセージ本文ライタが見つかりません

次のように私は、コードを持っている:

@POST 
@Path("/{scope}/{application}/tables") 
@Produces("application/xml") 
public List<String> getTableNames(@PathParam("scope") String scope, 
    @PathParam("application") String application, Request request) { 

    // For example, I am returning a list of String 
    return new ArrayList<String>(4); 
} 

私を助けてください。事前にありがとう

答えて

19

リストを返すには、@XmlRootElementという名前のコンテナにラップして、そのコンテナにフィールドとしてフィールドを追加し、@XmlElementと注釈を付けます。そのよう

@XmlRootElement 
public class Container { 
    @XmlElement 
    public List yourlist; 
} 
+2

「コンテナ」にデフォルトの引数なしコンストラクタがあることを確認してください:) – vikingsteve

3

thisを参照してください。そのJAXBは問題を与えていますが、リストを非整列化/マーシャリングする方法はわかりません。

-1

はGenericEntityを使用してみてください。

Response.ok(new GenericEntity<List<String>>(yourCollectionOfStrings) {}).build(); 
0

ラッピングを避けるために、ジャクソンを使用することができます。 それを行う方法については、私の後にすることができますanswer同様の質問です。

+1

レスポンスをJSONとして返す予定がある場合は、その設定が必要です。実際に、この質問(http://stackoverflow.com/questions/24653329/jaxrs-client-cont-find-message-body-writer/25536584#25536584)のこの回答を見ると、このような簡単な設定がわかります働くでしょう。しかし彼は応答としてXMLを望んでいます。 – saibharath

0

ドメインのプロジェクトスコープの既存のオブジェクトにリストを追加しました。

これは、プロジェクトにとってよりコンテクスト的であり、すぐに使えました.XmlRootElementをテストする必要はありませんが、そのオブジェクトの既存のテストケースのリストのテストデータ+ロジックを追加する必要はありません。

関連する問題