gpt4 book ai didi

java - 如何正确地将特定对象的列表转换为 Gson?

转载 作者:太空狗 更新时间:2023-10-29 22:39:04 26 4
gpt4 key购买 nike

我正在从事 Spring MVC 项目。我正在使用 hibernate 。我想将 AJAX 与 jQuery 结合使用,以从我的 Spring Controller 获取一些 JSON。不幸的是,当我实现 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我在带有 Hibernate 的 Spring MVC 项目中使用的类:

@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;
}

编辑 2

不,我的List<Message>对象未被代理。

最佳答案

我已经解决了我的问题。关于 HibernateProxy 对象的假设似乎很有可能。然而,当我仔细阅读我的错误时,一切都开始正常工作。最后我以这种方式注册了类型适配器:

public String messagesToJson(List<Message> messages) {  
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.registerTypeAdapter(Message.class, new MessageAdapter()).create();
return gson.toJson(messages);
}

我的任何 MessageAdapter 类如下所示:

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;
}
}

仅此而已。现在我可以正确使用 AJAX 在 jQuery 中获取 JSON。

关于java - 如何正确地将特定对象的列表转换为 Gson?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11518091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com