我正在開發Spring MVC項目。我正在使用Hibernate。我想使用AJAX與jQuery從我的Spring控制器中獲取一些JSON。不幸的是,當我實現我的應用程序Gson
方法我已經得到了一個錯誤:如何正確轉換特定對象列表爲Gson?
java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class:
org.hibernate.proxy.HibernateProxy. Forgot to register a type adapter?
哪個適配器我以何種方式使用和?發生在方法的最後一行的錯誤:
public String messagesToJson(List<Message> messages) {
Gson gson = new Gson();
List<Message> synchronizedMessages = Collections.synchronizedList(messages);
return gson.toJson(synchronizedMessages, ArrayList.class);
}
這是我Message
類,我用我的春天MVC項目與Hibernate:
@Entity
@Table(name = "MESSAGES", schema = "PUBLIC", catalog = "PUBLIC")
public class Message implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private int messageId;
private User users;
private String message;
private Date date;
//Constructor, getters, setters, toString
}
編輯
我我想知道:我的Message
對象被代理或整個List<Message>
?我得到的消息列表中這樣說:
public List<Message> findAllUserMessages(String username) {
Query query = entityManager.createQuery("from Message where username = :username order by date desc")
.setParameter("username", username);
@SuppressWarnings("unchecked")
List<Message> messages = query.getResultList();
return messages;
}
EDIT 2
不,我List<Message>
對象沒有代理。
這可能是因爲hibernate爲您的對象創建代理。所以參數'List messages'不能處理這些代理。正如你從你的堆棧跟蹤中看到的,你正試圖序列化'org.hibernate.proxy.HibernateProxy'。也許你可以在運行時使用帶有字節碼操作的'cglib'來避免創建代理。 –
madhead
2012-07-17 07:49:37
您應該將Hibernate對象映射到常規對象。 – Tomer 2012-07-17 08:24:53
我不得不簡單地創建類似於Hibernate對象但沒有註釋的POJO類嗎? @madhead然而,使用'cglib'似乎是一個矯枉過正的問題。 – woyaru 2012-07-17 08:30:56