Mam prosty kontroler, który zwraca obiekt użytkownika, ten użytkownik ma współrzędne atrybutu, które mają właściwość hibernacji FetchType.LAZY.
Kiedy próbuję uzyskać tego użytkownika, zawsze muszę załadować wszystkie współrzędne, aby uzyskać obiekt użytkownika, w przeciwnym razie, gdy Jackson próbuje serializować, użytkownik zgłasza wyjątek:
com.fasterxml.jackson.databind.JsonMappingException: nie można zainicjować serwera proxy - brak sesji
Wynika to z tego, że Jackson próbuje pobrać ten nietknięty obiekt. Oto obiekty:
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;
}
A kontroler:
@RequestMapping(value = "/user/{username}", method=RequestMethod.GET)
public @ResponseBody User getUser(@PathVariable String username) {
User user = userService.getUser(username);
return user;
}
Czy jest sposób, aby powiedzieć Jacksonowi, aby nie serializował nieobrobionych obiektów? Szukałem innych odpowiedzi opublikowanych 3 lata temu wdrażających moduł jackson-hibernate-module. Ale prawdopodobnie można to osiągnąć dzięki nowej funkcji jackson.
Moje wersje to:
- Wiosna 3.2.5
- Hibernacja 4.1.7
- Jackson 2.2
Z góry dziękuję.