Я ищу возможность сериализовать переходную информацию только в некоторых случаях:
@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, я ожидал увидеть идентификатор, адрес электронной почты и другие поля, но не подробности. Это прекрасно работает. Но я вижу то же самое для getUserAsJsonForAdmin, тоже без подробностей. Если я удалю аннотацию @JsonIgnore, я увижу детали в обоих вызовах.
Что я не так и есть ли хороший способ пойти? Спасибо!