【发布时间】:2017-05-03 05:39:57
【问题描述】:
我有一个 Spring 控制器注释类,它实现了这个方法:
@RequestMapping(value = "/event/eventList", method = RequestMethod.GET)
public @ResponseBody List<Event> listEvents() {
System.out.println("############ LIST EVENTS ############");
List<Event> events = eventService.listAllEvents();
for(Event event : events) {
Hibernate.getClass(event);
System.out.println(event);
}
return events;
}
当我从浏览器调用页面 (localhost:8080/myapp/event/eventList) 时,该方法将被正确调用我看到所有日志并且事件被正确打印意味着事件列表不是空且有效的,但是我得到了错误:
GRAVE: Servlet.service() for servlet [dispatcher] in context with path [/myapp] threw exception [Request processing failed; nested exception is java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: org.hibernate.proxy.HibernateProxy. Forgot to register a type adapter?] with root cause
java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: org.hibernate.proxy.HibernateProxy. Forgot to register a type adapter?
它不返回任何 Json 表示。 我更改了返回字符串的方法,例如:
@RequestMapping(value = "/event/eventList", method = RequestMethod.GET)
public @ResponseBody String listEvents() {
return "{'pippo':1}";
}
在这种情况下,浏览器会正确显示字符串。
我错过了什么吗?
【问题讨论】:
-
它告诉你,它不能序列化 HibernateProxy。
Hibernate.getClass不会让代理对象神奇地消失。您需要“解压”它,.getHibernateLazyInitializer().getImplementation()之类的东西可以做到,或者只是修复您的架构并且不提供控制器实体而是 DTO。
标签: json spring hibernate spring-mvc getjson