いくつかの場合にのみ一時的な情報をシリアル化する可能性を探しています:
@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、email、その他のフィールドが表示されるはずでしたが、詳細は表示されませんでした。これはうまくいきます。しかし、getUserAsJsonForAdmin についても同じことがわかりますが、詳細もありません。@JsonIgnore アノテーションを削除すると、両方の呼び出しで詳細が表示されます。
私は何を間違っていますか?良い方法はありますか?ありがとう!