У мене є простий контролер, який повертає об'єкт User, цей користувач має координати атрибутів, які мають властивість сплячого режиму 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
Заздалегідь спасибі.