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