2011-06-29 12 views
1

Playで小さなTweeterのようなアプリケーションを書いています! RESTEasyを使用した簡単なREST APIを使用します。私は単純なリソースがあります。RESTEasy json JAXB unmarshalling issue

@GET 
@Path("/tweets/all") 
@Produces("application/xml") 
public TweetList all(@QueryParam("page") @DefaultValue("1") Integer page) { 
    //return Tweet.find("order by dateCreated desc").fetch(page, 100); 
    List<Tweet> l = Tweet.find("order by dateCreated desc").fetch(page, 100); 
    return new TweetList(l); 
} 

を私もこの小さなラッパークラスを持っています。クライアント側では

@XmlRootElement(name = "tweetList") 
    private class TweetList { 

     private List<Tweet> tweets; 

     public TweetList(List<Tweet> tweets) { 
      this.tweets = tweets; 
     } 

     public TweetList() { 
     } 

     @XmlElement(name = "tweet") 
     public List<Tweet> getTweets() { 
      return tweets; 
     } 

     public void setTweets(List<Tweet> tweets) { 
      this.tweets = tweets; 
     } 
    } 

を、私は同様のラッパークラスとRESTEasyのプロキシを作成するためのクライアント側のインタフェースを持って、それが見えますデータを取得するための

@GET 
@Path("/tweets/all") 
@Produces("application/xml") 
public TweetList all(@QueryParam("page") @DefaultValue("1") Integer page); 

マイコード:

Tweet tweet = ProxyFactory.create(Tweet.class, "http://localhost:9000/rest"); 

     TweetList tweetList = tweet.all(null); 

     for(rest.client.beans.Tweet t : tweetList.getTweets()){ 
      System.out.printf("%s wrote %s, %s \n", t.author.fullName, t.content, t.id); 
     } 
このような

これはXMLに対して完璧に機能します。すべてのつぶやきが画面に表示されます。問題は、リターン形式としてJSONを使用したいということです。

Unrecognized field "tweetList" (Class rest.client.wrappers.TweetList), not marked as ignorable 

マイクライアント側のラッパー:

@XmlRootElement(name = "tweetList") 
public class TweetList { 


    private List<Tweet> tweets; 

    public TweetList(List<Tweet> tweets) { 
     this.tweets = tweets; 
    } 

    public TweetList() { 
    } 


    public List<Tweet> getTweets() { 
     return tweets; 
    } 

    @XmlElement(name = "tweet") 
    public void setTweets(List<Tweet> tweets) { 
     this.tweets = tweets; 
    } 
} 

そして私、私は私のリソースと@Producesへのプロキシ@Producesのアノテーション( "アプリケーション/ JSONを")に変更すると、私はこのエラーメッセージを取得していますこの問題を回避する方法を知らないブラウザに手で私のリソースを呼び出してからの出力例:

XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<tweetList> 
     <tweet> 
      <id>129</id> 
      <content>aksjdlkajsdlkjaskjdajdlakjsdljasdlkjakdjaljdlkajsd kajsdlkajsdl kajsdlkajsdl asdlkja lkdsjalksd</content> 
      <author> 
        <id>1</id> 
        <login>admin</login> 
        <fullName>Administrator</fullName> 
      </author> 
      <dateCreated>2011-06-13T21:08:03.145+02:00</dateCreated> 
     </tweet> 
     <tweet> 
      <id>98</id> 
      <content>Donec pulvinar porta feugiat. Sed adipiscing eros at libero mollis commodo. Duis auctor, tortor ac ultricies facilisis, purus velit fermentum elit, id luctus diam enim et felis.</content> 
      <author> 
        <id>2</id> 
        <login>user1</login> 
        <fullName>UserOne</fullName> 
      </author> 
      <dateCreated>2011-04-30T02:00:00+02:00</dateCreated> 
     </tweet> 
</tweetList> 

JSON:

{ 
    "tweetList":{ 
     "tweet":[ 
     { 
      "id":129, 
      "content":"aksjdlkajsdlkjaskjdajdlakjsdljasdlkjakdjaljdlkajsd kajsdlkajsdl kajsdlkajsdl asdlkja lkdsjalksd", 
      "author":{ 
       "id":1, 
       "login":"admin", 
       "fullName":"Administrator" 
      }, 
      "dateCreated":"2011-06-13T21:08:03.145+02:00" 
     }, 
     { 
      "id":98, 
      "content":"Donec pulvinar porta feugiat. Sed adipiscing eros at libero mollis commodo. Duis auctor, tortor ac ultricies facilisis, purus velit fermentum elit, id luctus diam enim et felis.", 
      "author":{ 
       "id":2, 
       "login":"user1", 
       "fullName":"UserOne" 
      }, 
      "dateCreated":"2011-04-30T02:00:00+02:00" 
     } 
     ] 
    } 
} 

答えて

0

それはあなたが使用しているJSONプロバイダに依存するが、最初のを移動してみてください@XmlElement(name = "tweet")から、クライアントサイドラッパーのgetter(getTweets)メソッドに渡します。他のすべては正常に見えます。

+0

提案したとおりにこの注釈を移動しましたが、何も変更されませんでした。私が例外をスローされて読むことができるものから、私はジャクソンが使われているのを見ます。 – jjczopek

1

はそうのようなあなたのJSONリクエストをフォーマットしてみてください。

{ 
    "tweet":[ 
    { 
     "id":129, 
     "content":"aksjdlkajsdlkjaskjdajdlakjsdljasdlkjakdjaljdlkajsd kajsdlkajsdl kajsdlkajsdl asdlkja lkdsjalksd", 
     "author":{ 
      "id":1, 
      "login":"admin", 
      "fullName":"Administrator" 
     }, 
     "dateCreated":"2011-06-13T21:08:03.145+02:00" 
    }, 
    { 
     "id":98, 
     "content":"Donec pulvinar porta feugiat. Sed adipiscing eros at libero mollis commodo. Duis auctor, tortor ac ultricies facilisis, purus velit fermentum elit, id luctus diam enim et felis.", 
     "author":{ 
      "id":2, 
      "login":"user1", 
      "fullName":"UserOne" 
     }, 
     "dateCreated":"2011-04-30T02:00:00+02:00" 
    } 
    ] 
} 

これは私がすべての私のJSON要求を行うために持っていたものです。私はそれがなぜこの方法で動作し、他の方法で動作するのか分かりません。

関連する問題