最佳答案
我有一个返回 User 对象的简单控制器,这个用户有一个属性坐标,它具有 hibernate 属性 FetchType.LAZY。
当我尝试获取这个用户时,我总是必须加载所有的坐标来获取用户对象,否则当 Jackson 尝试序列化 User 时会抛出异常:
异常: 无法初始化代理 -no Session
这是因为杰克逊正在尝试获取这个未被提取的对象。下面是这些对象:
public class User{
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
@JsonManagedReference("user-coordinate")
private List<Coordinate> coordinates;
}
public class Coordinate {
@ManyToOne
@JoinColumn(name = "user_id", nullable = false)
@JsonBackReference("user-coordinate")
private User user;
}
还有控制器:
@RequestMapping(value = "/user/{username}", method=RequestMethod.GET)
public @ResponseBody User getUser(@PathVariable String username) {
User user = userService.getUser(username);
return user;
}
有办法告诉 Jackson 不要序列化未提取的对象吗?我一直在寻找3年前发布的实现 Jackson-hibernate-module 的其他答案。但也许可以通过杰克逊的新功能来实现。
我的版本是:
先谢谢你。