Userオブジェクトを返す単純なコントローラーがあります。このユーザーには、休止状態のプロパティFetchType.LAZYを持つ属性座標があります。
このユーザーを取得しようとすると、ユーザーオブジェクトを取得するために常にすべての座標をロードする必要があります。そうしないと、Jacksonがユーザーをシリアル化しようとすると例外がスローされます。
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;
}
フェッチされていないオブジェクトをシリアル化しないようにJacksonに指示する方法はありますか?私は3年前に投稿された他の回答を探していました。jackson-hibernate-moduleを実装しています。しかし、おそらくそれは新しいジャクソン機能で達成できるでしょう。
私のバージョンは次のとおりです。
- 春3.2.5
- Hibernate 4.1.7
- ジャクソン2.2
前もって感謝します。