当我的延迟初始化失败时,可以使用 JsonIgnore 吗?
It's possible to use JsonIgnore when my lazily initialize is failed?
当我与 fetch = FetchType.LAZY
的关联变量未初始化时,我搜索了一种使用 JsonIgnore(或只是 return 一个空数组)的方法,并在初始化时使用我自己的序列化器。
我尝试在我的序列化程序中进行测试,但我遇到了同样的错误。
提前致谢!
我的对象:
@JsonSerialize(using = CustomSerializerAdmin.class)
@Cascade(...)
@ManyToMany(targetEntity = Admin.class, fetch = FetchType.LAZY)
@JoinTable(...)
private Set<Admin> admins;
我的序列化程序:
class CustomSerializerAdmin extends StdSerializer<Set<Admin>> {
public CustomSerializerAdmin() {
this(null);
}
public CustomSerializerAdmin(Class<Set<Admin>> admins) {
super(admins);
}
@Override
public void serialize(Set<Admin> admins, JsonGenerator gen, SerializerProvider provider) throws IOException {
if (!Hibernate.isInitialized(admins) | admins == null | admins.size() < 1) {
gen.writeString("[]");
} else {
gen.writeString("[test]");
}
}
}
Java 中的 |
运算符不会短路,因此您将调用 size()
无论如何都会触发延迟初始化。您应该使用短路的双管 ||
:
if (admins == null || !Hibernate.isInitialized(admins) || admins.size() < 1) {
当我与 fetch = FetchType.LAZY
的关联变量未初始化时,我搜索了一种使用 JsonIgnore(或只是 return 一个空数组)的方法,并在初始化时使用我自己的序列化器。
我尝试在我的序列化程序中进行测试,但我遇到了同样的错误。
提前致谢!
我的对象:
@JsonSerialize(using = CustomSerializerAdmin.class)
@Cascade(...)
@ManyToMany(targetEntity = Admin.class, fetch = FetchType.LAZY)
@JoinTable(...)
private Set<Admin> admins;
我的序列化程序:
class CustomSerializerAdmin extends StdSerializer<Set<Admin>> {
public CustomSerializerAdmin() {
this(null);
}
public CustomSerializerAdmin(Class<Set<Admin>> admins) {
super(admins);
}
@Override
public void serialize(Set<Admin> admins, JsonGenerator gen, SerializerProvider provider) throws IOException {
if (!Hibernate.isInitialized(admins) | admins == null | admins.size() < 1) {
gen.writeString("[]");
} else {
gen.writeString("[test]");
}
}
}
Java 中的 |
运算符不会短路,因此您将调用 size()
无论如何都会触发延迟初始化。您应该使用短路的双管 ||
:
if (admins == null || !Hibernate.isInitialized(admins) || admins.size() < 1) {