SpringBoot Kotlin MongoDB:Expense类构造器参数6缺失ObjectId Bean错误
问题解决方案
错误原因
你给Expense类添加了@Component注解,Spring会自动尝试创建该类的Bean实例,但构造器中的category和userID没有默认值,Spring容器内不存在org.bson.types.ObjectId类型的Bean,也无法自动提供Category实例,导致依赖注入失败。
修复步骤
移除
@Component注解
MongoDB实体类仅需@Document注解标识为MongoDB文档对象,无需被Spring当作组件管理。@Component会触发Spring自动实例化该类,引发不必要的依赖注入问题。为构造器参数添加默认值
确保所有构造器参数都有默认值,让Spring Data MongoDB能正常初始化实体实例:
- 若
Category是枚举类型,设置一个默认枚举值; userID可设置默认的ObjectId(),或根据业务逻辑调整。
修改后的代码:
package com.example.moneymanagerbackend.model import org.bson.types.ObjectId import org.springframework.data.annotation.Id import org.springframework.data.mongodb.core.mapping.Document import java.time.LocalDate @Document data class Expense( @Id val id: ObjectId = ObjectId(), var amount: Double = 0.0, var date: LocalDate = LocalDate.now(), var recurrence: String = "", var description: String = "", var category: Category = Category.DEFAULT, // 替换为实际枚举默认值 val userID: ObjectId = ObjectId() ) // 示例枚举类,根据实际业务调整 enum class Category { DEFAULT, FOOD, TRANSPORT, ENTERTAINMENT }
额外说明
- Spring Data MongoDB会自动处理实体类的实例化,无需通过
@Component交由Spring管理; - 若
userID是关联其他用户文档的ID,建议创建Expense实例时手动传入,避免生成无效ID。
内容的提问来源于stack exchange,提问作者Aditya Shrestha
相关产品推荐
相关产品推荐

