1
我試圖將JSON字符串轉換爲我的模型類。我在遊戲框架中使用嗎啡。Playframework,將JSON轉換爲模型(使用Gson),保存模型失敗
這裏是代碼中的相關行:
public static void add(JsonObject body) {
System.out.println(body); // -> {"title":"test2","url":"http://www.gmx.de","description":"eine beschreibung für das lesezeichen","tags":["tag1","tag2","tag3","tag5","tag0209135913598"],"is_private":true}
Gson gson = new Gson();
Bookmark bookmark = gson.fromJson(body, Bookmark.class);
System.out.println(bookmark.getClass().getName()); // -> models.Bookmark
bookmark.save();
但我認爲我'做錯了什麼,因爲這個代碼拋出以下異常:
Execution exception (In /app/controllers/Bookmarks.java around line 40)
IllegalArgumentException occured : can't serialize class java.lang.Object
play.exceptions.JavaExecutionException: can't serialize class java.lang.Object
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:231)
at Invocation.HTTP Request(Play!)
Caused by: java.lang.IllegalArgumentException: can't serialize class java.lang.Object
at org.bson.BSONEncoder._putObjectField(BSONEncoder.java:234)
at org.bson.BSONEncoder.putIterable(BSONEncoder.java:259)
at org.bson.BSONEncoder._putObjectField(BSONEncoder.java:198)
at org.bson.BSONEncoder.putObject(BSONEncoder.java:140)
at org.bson.BSONEncoder.putObject(BSONEncoder.java:86)
at com.mongodb.OutMessage.putObject(OutMessage.java:190)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:253)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:217)
at com.mongodb.DBCollection.insert(DBCollection.java:71)
at com.mongodb.DBCollection.save(DBCollection.java:633)
at com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:764)
at com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:826)
at com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:820)
at play.modules.morphia.Model.save2(Model.java:705)
at play.modules.morphia.Model.save(Model.java:692)
at controllers.Bookmarks.add(Bookmarks.java:40)
at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:548)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:502)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:478)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:473)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161)
... 1 more
好像是,以下行引發此異常:
bookmark.save();
以下是模型的代碼:
@AutoTimestamp
@Entity
public class Bookmark extends Model {
public String title;
public String url;
public String description;
@Indexed
public List tags;
public boolean is_private;
public Bookmark() {}
public Bookmark(String title,
String url,
String description,
List tags,
boolean is_private)
{
this.title = title;
this.url = url;
this.description = description;
this.tags = tags;
this.is_private = is_private;
}
}
我現在的問題是我怎麼能解決這個問題,否則我怎麼也得創建基於JSON輸入模型實例?
好吧,我試過第二個解決方案,但它並不真正的工作。調用add()總是導致「無法序列化類java.lang.Object」。所以我現在正在使用類似「中間方式」的東西..一個具有與我的模型相同的屬性的「翻譯」對象 - 我使用這個對象來填充json數據,然後創建一個基於該對象的模型。 ..對我來說很有效...也許不是最好的/優雅的方式 - 但是現在它的工作。 – Marc 2012-03-10 21:37:03
無論如何,關於JsonObject-> toJson的提示很有用。 – Marc 2012-03-10 21:47:12