У меня есть простой контроллер, который возвращает объект 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. Но, вероятно, этого можно было бы достичь с помощью новой функции Джексона.
Мои версии:
- Весна 3.2.5
- Гибернация 4.1.7
- Джексон 2.2
Заранее спасибо.