Getting the error "A serial analyzer was not found for the class org.springframework.data.mongodb.core.convert.DefaultDbRefResolver $ LazyLoadingInterceptor"

I use spring mongodb data, after lazy loading true, I get an error "No serializer found for class org.springframework.data.mongodb.core.convert.DefaultDbRefResolver$LazyLoadingInterceptor".

My domain class

public class Preference extends BaseEntity {

    @DBRef(lazy = true)
    User user;

    MetadataEnum preferenceType;


    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }


    public MetadataEnum getPreferenceType() {
        return preferenceType;
    }


    public void setPreferenceType(MetadataEnum preferenceType) {
        this.preferenceType = preferenceType;
    }


    public List<Subtype> getSubtypes() {
        return subtypes;
    }


    public void setSubtypes(List<Subtype> subtypes) {
        this.subtypes = subtypes;
    }

    List<Subtype> subtypes = new ArrayList<Subtype>();


    boolean enableSearch;

}

I spent a lot of time, but I can’t get a suitable answer? can anyone help me redo it? thanks in advance

+1
source share
2 answers

Add this configuration code for your requirement.

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.convert.LazyLoadingProxy;

import com.fasterxml.jackson.core.Version;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;

@Configuration
public class LazyLoadingSerializationConfig {

    @Bean
    public ObjectMapper objectMapper() {

        ObjectMapper om = new ObjectMapper();
        final SimpleModule module = new SimpleModule("<your entity>", new Version(1, 0, 0,null));

        module.addSerializer(LazyLoadingProxy.class, new LazyLoadingSerializer());
        om.registerModule(module);

        return om;
    }

}

and

import java.io.IOException;

import org.springframework.data.mongodb.core.convert.LazyLoadingProxy;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

public class LazyLoadingSerializer extends JsonSerializer<LazyLoadingProxy> {

    @Override
    public void serialize(LazyLoadingProxy value, JsonGenerator jgen,
        SerializerProvider provider) throws IOException,
        JsonProcessingException {

        jgen.writeStartObject();
        jgen.writeStringField("id", value.toDBRef().getId().toString());
        jgen.writeEndObject();
    }
}

Hope this helps you!

+2
source

bean, @DBRef , jackson @DBRef (lazy = true) List, '@DBRef (lazy = true) , bean '.

0

Source: https://habr.com/ru/post/1589481/


All Articles