RestController返回的域对象导致AJAX错误;自定义模型对象工作
我的SpringMVCRestController返回的域对象导致AJAX错误;自定义模型对象工作,ajax,spring,spring-mvc,spring-restcontroller,Ajax,Spring,Spring Mvc,Spring Restcontroller,我的SpringMVCRestController中有一个写入JSON结果的问题: 1) 当我返回如下所示的域对象时,activitiestt,我在客户端收到一个AJAX 500内部服务器错误 @RequestMapping("/participant/activityForEvent") public ActivitiesT getActivityForGuiEventId() throws Exception { ActivitiesT activitiesT = particip
RestController
中有一个写入JSON结果的问题:
1) 当我返回如下所示的域对象时,activitiestt,我在客户端收到一个AJAX 500内部服务器错误
@RequestMapping("/participant/activityForEvent")
public ActivitiesT getActivityForGuiEventId() throws Exception {
ActivitiesT activitiesT = participantService.getActivity();
return activitiesT;
}
最活跃的域对象,Hibrate生成:
@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) 但是,当我返回一个自定义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);
}
活动自定义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)
需要注意的一些事项:
- 这两个对象都实现了可序列化,这很好
- 问题不是DAO,我可以看到DAO总是返回正确的数据,我们可以忽略DAO片段
- 控制器用
注释,因此它总是输出JSON;我不需要ResponseBook或旧的标记@RestController
- 我无法从Hibernate生成的@Entity POJO上的RestController方法返回JSON
- 但我可以在自己的自定义POJO上从RestController方法返回JSON
为了避免这种情况,请始终使用DTO而不是实际的模型类。正如您所提到的-从RestController返回的域对象会导致AJAX错误;自定义模型对象会工作。您能否提供引发的异常(
500内部服务器错误
)?服务器端没有抛出异常,控制器完成正常。当我在客户端访问AJAX JS时,我只在Firebug中看到500个内部服务器错误。500个内部服务器错误表示服务器端正在发生某些事情。我见过这种问题,在大型对象的序列化中,ActivitiesT
很简单或者复杂对象(只是猜测)在控制器返回值后引发某种异常。我现在得到错误消息,它是:HTTP状态500-无法写入JSON:无法初始化代理-无会话;嵌套异常是com.fasterxml.jackson.databind.JsonMappingException:无法初始化代理-无会话(通过引用链:com.myapp)是的,我相信这就是问题所在。:)幸运的是,我们现在对所有JSON返回方法都使用普通POJO。谢谢