Ich habe einen einfachen Controller, der ein Benutzerobjekt zurückgibt. Dieser Benutzer hat Attributkoordinaten mit der Eigenschaft FetchType.LAZY im Ruhezustand.
Wenn ich versuche, diesen Benutzer zu erhalten, muss ich immer alle Koordinaten laden, um das Benutzerobjekt zu erhalten. Andernfalls löst Jackson beim Versuch, den Benutzer zu serialisieren, die Ausnahme aus:
com.fasterxml.jackson.databind.JsonMappingException: Proxy konnte nicht initialisiert werden - keine Sitzung
Dies liegt daran, dass Jackson versucht, dieses nicht abgerufene Objekt abzurufen. Hier sind die Objekte:
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;
}
Und der Controller:
@RequestMapping(value = "/user/{username}", method=RequestMethod.GET)
public @ResponseBody User getUser(@PathVariable String username) {
User user = userService.getUser(username);
return user;
}
Gibt es eine Möglichkeit, Jackson anzuweisen, die nicht abgerufenen Objekte nicht zu serialisieren? Ich habe nach anderen Antworten gesucht, die vor 3 Jahren veröffentlicht wurden, als das Jackson-Hibernate-Modul implementiert wurde. Aber wahrscheinlich könnte es mit einer neuen Jackson-Funktion erreicht werden.
Meine Versionen sind:
- Feder 3.2.5
- Ruhezustand 4.1.7
- Jackson 2.2
Danke im Voraus.