当我的延迟初始化失败时,可以使用 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) {