Spring MVC控制器Json响应,hibernate代理错误

时间:2016-12-17 17:18:05

标签: json spring hibernate spring-mvc getjson

我有一个Spring控制器注释类,它实现了这个方法:

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?

当我从浏览器调用页面(localhost:8080 / myapp / event / eventList)时,将正确调用该方法我看到所有日志并正确打印事件意味着事件列表不为空且有效,但是我收到错误:

@RequestMapping(value = "/event/eventList", method = RequestMethod.GET)
public @ResponseBody String listEvents() {

    return "{'pippo':1}";
}

它不返回任何Json表示。 我更改了方法以返回如下字符串:

`chrome.alarms.onAlarm.addListener(function( alarm ) {
  // 
  console.log("Got an alarm!");
   alert('great1');
   chrome.browserAction.setIcon({ path: "icons/10n.png" });
   chrome.alarms.create({'delayInMinutes': 1});
   location.reload();
});
// 
chrome.alarms.create({'delayInMinutes': 1});

在这种情况下,浏览器会正确显示字符串。

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

当GSON尝试将变量'events'序列化为Json时,com.google.gson.internal.bind.TypeAdapters抛出异常。

发生这种情况,原因是

func setupViews() {

    view.addSubview(tableView)
    NSLayoutConstraint.activate([

        tableView.topAnchor.constraint(equalTo: self.view.topAnchor),
        tableView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),
        tableView.leftAnchor.constraint(equalTo: self.view.leftAnchor),
        tableView.rightAnchor.constraint(equalTo: self.view.rightAnchor),
    ])

    profileView.addSubview(avatarImage)

    avatarImage.frame = CGRect(origin: CGPoint(x: view.frame.width/2 - 80/2 ,
                                               y: yPositionOfAvatarImage),
                               size: CGSize(width: 80,
                                            height: 80))
}

返回的不是已经包含所有事件的列表,而是在实际使用列表时将执行懒惰的hibernate代理。 GSON不知道如何序列化该代理。

Hibernate.getClass应将基础对象初始化为副作用。

您还需要为列表'事件'本身调用它,而不仅仅是针对每个事件。 List也可以是一个休眠代理。

您可以在此处找到有关该主题的更多信息 Could not serialize object cause of HibernateProxy