从 RestController 返回的域对象导致 AJAX 错误;自定义模型对象工作

Domain Object Returned from RestController causes AJAX error; Custom Model Object works

我的 SpringMVC RestController 中有一个问题写入 JSON 结果:

1) 当我 return 如下所示的 域对象 ActivitiesT 时,我在客户端收到 AJAX 500 内部服务器错误。

@RequestMapping("/participant/activityForEvent") 
public ActivitiesT getActivityForGuiEventId() throws Exception {
    ActivitiesT activitiesT = participantService.getActivity();
    return activitiesT;
}

ActivitiesT 域对象,Hiberate 生成:

@Entity
@Table(name = "activities_t", schema = "public")
public class ActivitiesT implements java.io.Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private int id;
    //... etc...
}

2) 但是当我 return 一个 自定义 POJO 时,AJAX 方法有效。几乎一样。

@RequestMapping("/participant/activityForEvent") 
public ActivitiesT getActivityForGuiEventId() throws Exception {
    ActivitiesT activitiesT = participantService.getActivity();
    // Create a custom Activity POJO and return it
    return new Activity(activitiesT.id, activitiesT.title);
}

Activity 自定义 POJO:

public class Activity implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public int id;
    public String title;
     //etc.

错误信息

HTTP Status 500 - Could not write JSON: could not initialize proxy - no Session; nested exception is com.fasterxml.jackson.databind.JsonMappingException: could not initialize proxy - 

无会话(通过引用链:com.myapp")

一些注意事项:

对问题可能出在哪里有任何想法吗?问题归结为:

当 Jackson 准备响应时,它会递归地尝试将模型 类 转换为 JSON.For 示例,如果您的部门和员工之间存在一对多关系,那么 Jackson 会在 Department.java 准备 response.But getEmployees() 方法需要 hibernate 执行另一个查询以从数据库中获取员工记录,因为延迟加载。但是 session 已经关闭了。因此你得到这个错误。 为避免这种情况,请始终使用 DTO 而不是实际模型 classes.And 与您提到的相同 - 从 RestController 返回的域 Object 会导致 AJAX 错误;自定义模型 Object 有效。