7

Springを使用してRESTサービスを作成しています。

これが私のコントローラーの一部です:

@RequestMapping("/get")
public @ResponseBody Person getPerson() {
    Person person = personRepository.findOne(1L);
    //(1) person.setRoles(null);
    return person;
}

その人の役割は怠惰に初期化されており、その時点では必要ありません。(1)がコメントアウトされると、すべてが失敗します

org.springframework.http.converter.HttpMessageNotWritableException:JSONを書き込めませんでした:ロールのコレクションを遅延初期化できませんでした:no.something.project.Person.roles、プロキシを初期化できませんでした-セッションがありませんなど。

これは、(1)として実行し、手動でnull(またはその他の値)に設定することで解決できるため、Jacksonがオブジェクトをシリアル化しようとしても失敗しません。

ただし、これは煩わしいため、さまざまな場所で何度も実行する必要があります。初期化されていないときにこれらの遅延初期化フィールドを無視するか、単にnullに設定する簡単な解決策が欲しいです。

注:オブジェクトの値の@JsonIgnoreは解決策ではありません。他の場合には、これらの値を含める必要があります。

4

1 に答える 1

5

ジャクソンフィルターのジャクソンビューを確認してください(私が覚えているように、両方ともSpringでサポートされています)。

また、レイジーフィールド(除外されていない場合)を操作するには、 -jackson-module-hibernateが必要です。

于 2013-03-13T21:19:05.497 に答える