Skip to content
Advertisement

It’s possible to use JsonIgnore when my lazily initialize is failed?

I search one way to use JsonIgnore (or just return an empty array) when my assotiation variable with fetch = FetchType.LAZY isn’t initialize and use my own serializer when it is.

I tryed to do test in my serializer but I get the same error.

Thank you in advance!

My object:

@JsonSerialize(using = CustomSerializerAdmin.class)
@Cascade(...)
@ManyToMany(targetEntity = Admin.class, fetch = FetchType.LAZY)
@JoinTable(...)
private Set<Admin> admins;

My Serializer:

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]");
        }

    }
}

Advertisement

Answer

The | operator in Java does not short-circuit, so you will call size() anyway which triggers lazy initialization. You should use the double pipe || which short-circuits:

    if (admins == null || !Hibernate.isInitialized(admins) || admins.size() < 1) {
User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement