'Spring Boot MongoDB Can't find a codec for class

I'm new to MongoDb, I pulled a simple aggregation from compass. Now I am trying to return the data, unfortunately I am getting this error: Caused by: org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class com.example.DemoMongo.model.User. this is my configuration in spring boot:

Model

@Document("user")
public class User {
    
    @Id
    private String id;
    private String name;
    private List<Indirizzi> indirizzi;
    
    
    public String getId() {
        return id;
    }
    public String getName() {
        return name;
    }
    public List<Indirizzi> getIndirizzi() {
        return indirizzi;
    }
    public void setId(String id) {
        this.id = id;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setIndirizzi(List<Indirizzi> indirizzi) {
        this.indirizzi = indirizzi;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", indirizzi=" + indirizzi + "]";
    }

@Document("indirizzi")
public class Indirizzi {
    
    @Id
    private String id;
    private String via;
    
    
    public String getId() {
        return id;
    }
    public String getVia() {
        return via;
    }
    public void setId(String id) {
        this.id = id;
    }
    public void setVia(String via) {
        this.via = via;
    }
    @Override
    public String toString() {
        return "Indirizzi [id=" + id + ", via=" + via + "]";
    }
    
}

Repository

public class UserRepositoryImpl implements UserCustomRepository {

    private final MongoTemplate mongoTemplate;
    
    @Autowired
    public UserRepositoryImpl(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }
    
    @Override
    public List<User> getUser() {
        
        MongoCollection<Document> collection = this.mongoTemplate.getCollection("user");
        AggregateIterable<User> result = collection.aggregate(Arrays.asList(new Document("$lookup", 
                new Document("from", "indirizzi")
                        .append("localField", "indirizzi")
                        .append("foreignField", "_id")
                        .append("as", "indirizzi"))),User.class);

        List<User> list= new ArrayList<>();
        MongoCursor<User> iterator = result.iterator(); //<- ERROR! Can't find a codec for class com.example.DemoMongo.model.User.
        while (iterator.hasNext()) {
            User user = iterator.next();
          
            list.add(user);
        }
        
        return null;
    }
}

public interface UserRepository extends MongoRepository<User,String>,UserCustomRepository{

    public List<User>getUser();
}

public interface UserCustomRepository {

    List<User> getUser();
}

POM dependencies

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

Thanks in advance



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source