我正在从事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
在Spring 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;
}
编辑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 8 Stream包,我想将object类型的数组列表转换为特定类对象的列表。第一个列表上的数组包含从数据库加载的类的字段。 这是从DB加载的object类型数组的列表: 列表中的每个元素都包含我想要映射到以下类的字段: 正如您所看到的,原始列表中存在的每个元素都是对象[]的数组表示 现在,我知道如何使用循环来实现这一点,正如您在下面看到的,只需3行代码: 如何使用Java 8流实现相
问题内容: 我有SourceObjects列表,我需要将其转换为ResultObjects列表。 我可以使用ResultObject的方法将一个对象获取到另一个对象: 我当然可以这样: 但对于能够展示如何使用 rxJava 进行相同操作的人,我将非常感激。 问题答案: 如果发出,则可以使用以下运算符: (将您的列表转换为可观察项) (将您的商品转换为其他商品) 运算符(将完成的Observable
我有以下格式的列表 如何根据其键找到值,例如我需要第3行的名称...以及如何根据行对其进行排序
问题内容: 最近我谈话有什么将要转换的最佳方式是同事,以在Java中,如果有这样做的任何特殊利益。 我想知道最佳转换方法,如果有人可以指导我,我将不胜感激。 这是个好方法吗? 问题答案: 当然,假设每个Item都有一个返回正确类型的键的方法。
我在Eclipse IDE中编写了JavaFx项目,它工作正常。 一旦我把它转换成Maven项目,我的FMXL文件就停止打开了。但是,如果我创建新的FXML文件并将它们放在相同的文件夹中,一切都会正常工作。 有没有办法在不重新创建所有FXML文件的情况下运行我的Maven项目? 我已经尝试过在代码中更改FXML文件的路径,将FXML移到src/main/resources包,或者简单地将代码从旧的
问题内容: Json字符串: C#类: C#将json转换为电影的c#列表: 我的变量最终是一个计数为0的空列表。我是否缺少某些内容? 问题答案: 您的C#类映射与json结构不匹配。 解决方案: