我有一个返回用户对象的简单控制器,该用户的属性坐标具有休眠属性FetchType.LAZY。
当我尝试获取该用户时,我总是必须加载所有坐标才能获取用户对象,否则,当杰克逊尝试序列化User时,将抛出异常:
com.fasterxml.jackson.databind.JsonMappingException:无法初始化代理-没有会话
这是由于Jackson试图获取此未获取的对象。这里是对象:
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;
}
有没有办法告诉杰克逊不要序列化未提取的对象?我一直在寻找3年前发布的实现jackson-hibernate-module的其他答案。但是可能可以通过新的杰克逊功能来实现。
我的版本是:
- 春天3.2.5
- 休眠4.1.7
- 杰克逊2.2
提前致谢。