我在尋找可能只在某些情況下,序列化瞬時信息:傑克遜:忽略吸氣,但不能與@JsonView
@JsonInclude(Include.NON_NULL)
@Entity
public class User {
public static interface AdminView {}
... id, email and others ...
@Transient
private transient Details details;
@JsonIgnore // Goal: ignore all the time, except next line
@JsonView(AdminView.class) // Goal: don't ignore in AdminView
public Details getDetails() {
if (details == null) {
details = ... compute Details ...
}
return details;
}
}
public class UserDetailsAction {
private static final ObjectWriter writer = new ObjectMapper();
private static final ObjectWriter writerAdmin = writer
.writerWithView(User.AdminView.class);
public String getUserAsJson(User user) {
return writer.writeValueAsString(user);
}
public String getUserAsJsonForAdmin(User user) {
return writerAdmin.writeValueAsString(user);
}
}
如果我打電話getUserAsJson我期望看到ID,電子郵件等領域,但不是細節。這工作正常。但是我看到getUserAsJsonForAdmin也是一樣,也沒有細節。如果我刪除@JsonIgnore註釋 - 我確實在兩個調用中看到細節。
我錯了什麼,有沒有好的方法?謝謝!
感謝您一個很好的例子! –
好的,在測試了不同的解決方案之後,自定義過濾器和FilterIntrospector似乎是我想要的方式。 –
對於任何在線程中使用此代碼的人,使用shouldIncludeAllFields可能會產生併發問題。但只需創建2個ObjectMapper即可輕鬆修復,1個使用過濾器,1個不使用。 ObjectMapper是Threadsafe – muttonUp