2013-03-13 69 views
5

我使用Spring並創建一個REST服務。讓傑克遜忽略當序列化爲json時初始化的字段

這裏是我的控制器的一部分:

@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(或其他值),所以它不會失敗時傑克遜試圖序列化我的對象。

但是,這是煩人的,必須做很多次不同的地方。我想要一些簡單的解決方案,只是在未初始化時忽略這些懶惰的初始化字段,或者將它們設置爲null。

注意:@JsonIgnore對象上的值不是解決方案,因爲在其他情況下我希望這些值包含在內。

回答

5

檢查Jackson Views對於Jackson Filters(我記得這兩個都支持Spring)。

而且,與懶惰場工作(如果他們不除外)你需要 - jackson-module-hibernate

+0

如何使用同春傑克遜模塊休眠?維基上的代碼錯過了一些東西。 – Matsemann 2013-04-04 21:31:26

+0

我向項目提出了pullrequest,提供工作代碼。 – Matsemann 2013-04-09 10:26:53

+0

@Matsemann我在這裏得到了解決方案並提供了工作代碼:http://stackoverflow.com/questions/21708339/avoid-jackson-serialization-on-non-fetched-lazy-objects/21760361#21760361 – r1ckr 2014-02-14 08:31:45