如何正确转换特定对象列表为Gson? [英] How to properly convert List of specific objects to Gson?
问题描述
Gson
方法时,出现错误: java.lang.UnsupportedOperationException:试图序列化java.lang.Class:
org.hibernate.proxy.HibernateProxy。忘记注册一个类型适配器?
我必须使用哪种适配器以及以哪种方式使用?错误发生在方法的最后一行:
public String messagesToJson(List< Message> messages){
Gson gson = new Gson();
列表<消息> synchronizedMessages = Collections.synchronizedList(messages);
返回gson.toJson(synchronizedMessages,ArrayList.class);
这是我的消息
class我在Spring MVC项目中使用Hibernate:
@Entity
@Table(name =MESSAGES ,schema =PUBLIC,catalog =PUBLIC)
公共类Message实现java.io.Serializable {
private static final long serialVersionUID = 1L;
private int messageId;
私人用户用户;
私人字符串消息;
私人日期日期;
//构造函数,getters,setters,toString
}
编辑
我想知道:我的 Message
code>列表与LT;消息> ?我以这种方式得到消息列表:
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();
返回消息;
}
编辑2
不,我的< code> List< Message> 对象没有被代理
我解决了我的问题。关于 HibernateProxy
对象的假设似乎很可能。但是,当我仔细阅读我的错误时,一切都已开始正常工作。最后我以这种方式注册了类型适配器:
public String messagesToJson(List< Message> messages){
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.registerTypeAdapter(Message.class,new MessageAdapter())。create();
返回gson.toJson(消息);
任何我的 MessageAdapter
类看起来像:
public class MessageAdapter实现JsonSerializer< Message> {
@Override
public JsonElement serialize(Message message,Type type,JsonSerializationContext jsc){
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty(message_id,message.getMessageId());
jsonObject.addProperty(message,message.getMessage());
jsonObject.addProperty(user,message.getUsers()。getUsername());
jsonObject.addProperty(date,message.getDate()。toString());
返回jsonObject;
}
}
这就是全部。现在我可以正确使用AJAX在jQuery中获取JSON。
I am working on Spring MVC project. I am using Hibernate. I want to use AJAX with jQuery to get some JSONs from my Spring Controllers. Unfortunately when I was implementing Gson
methods in my application I have got an error:
java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class:
org.hibernate.proxy.HibernateProxy. Forgot to register a type adapter?
Which adapter I have to use and in which way? The error has occurred on the last line of the method:
public String messagesToJson(List<Message> messages) {
Gson gson = new Gson();
List<Message> synchronizedMessages = Collections.synchronizedList(messages);
return gson.toJson(synchronizedMessages, ArrayList.class);
}
This is my Message
class I am using in my Spring MVC project with 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
}
EDIT
I am wondering: my Message
object is proxied or the whole List<Message>
? I am getting the list of messages in this way:
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
No, my List<Message>
object isn't proxied.
I have resolved my problem. The assumption about HibernateProxy
objects seemed to be very probable. However everything has started to work properly when I have read carefully my error. Finally I have registered type adapter in this way:
public String messagesToJson(List<Message> messages) {
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.registerTypeAdapter(Message.class, new MessageAdapter()).create();
return gson.toJson(messages);
}
Any my MessageAdapter
class looks like:
public class MessageAdapter implements JsonSerializer<Message> {
@Override
public JsonElement serialize(Message message, Type type, JsonSerializationContext jsc) {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("message_id", message.getMessageId());
jsonObject.addProperty("message", message.getMessage());
jsonObject.addProperty("user", message.getUsers().getUsername());
jsonObject.addProperty("date", message.getDate().toString());
return jsonObject;
}
}
And thats all. Now I can get JSONs in jQuery using AJAX properly.
这篇关于如何正确转换特定对象列表为Gson?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!