У меня есть простой контроллер, который возвращает объект User, этот пользователь имеет координаты атрибутов, которые имеют свойство hibernate FetchType.LAZY.
Когда я пытаюсь получить этого пользователя, мне всегда нужно загрузить все координаты, чтобы получить объект пользователя, иначе, когда Джексон попытается выполнить сериализацию пользователя, выдается исключение:
com.fasterxml.jackson.databind.JsonMappingException: не удалось инициализировать прокси - нет сеанса
Это связано с тем, что Джексон пытается извлечь этот необработанный объект. Вот объекты:
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. Но, возможно, это может быть достигнуто с помощью новой функции jackson.
Мои версии:
- Spring 3.2.5
- Hibernate 4.1.7
- Джексон 2.2
Спасибо заранее.