创建名称为 'memberSv' 的 bean 在 com.example.accountproject.models.interfaces.MemberSv 中定义时出错

Error creating bean with name 'memberSv' defined in com.example.accountproject.models.interfaces.MemberSv defined

我是学生java。我想使用 Spring boot mongoDB 进行简单的会员注册,但是出现错误,我提出了一个问题。 我的源代码

  1. 会员DTO

     public class MemberDTO {
    
         @Id
         private String memberId;
         private String memberPwd;
         private String memberName;
         private String memberEName;
         private String memberCompany;
         private String memberPhone;
         private String memberZipCode;
         private String memberAddress;
         private String memberAddressDetail;
         private String memberAuth;
         @CreatedDate
         private Date createdDate;
     }
    
  2. 会员控制器

     @Controller
     @RequestMapping("/member")
     public class MemberController {
    
    
         @Autowired
         private MemberSv memberSv;
    
         @RequestMapping(value = "/join", method = RequestMethod.POST)
         public String membersave(MemberDTO memberDTO)
         {
             memberSv.membersave(memberDTO);
             return "join_form";
         }
     }
    
  3. MemberSv

     @Repository
     public interface MemberSv extends MongoRepository<MemberDTO, String> {
         MemberDTO membersave(MemberDTO memberDTO);
     }
    
  4. MemberSvImp

     @Service
     @Transactional
     public class MemberSvImp {
    
         @Autowired
         private MemberSv memberSv;
    
         public MemberDTO membersave(MemberDTO memberDTO) {
             return memberSv.save(memberDTO);
         }
     }
    
  5. Spring启动主要方法

     @EnableMongoRepositories(basePackageClasses =com.example.accountproject.models.interfaces.MemberSv.class)
     @SpringBootApplication
     public class AccountProjectApplication {
    
         public static void main(String[] args) {
             SpringApplication.run(AccountProjectApplication.class, args);
         }
     }
    
  6. 错误

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberController': 
Unsatisfied dependency expressed through field 'memberSv'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'memberSv' defined in com.example.accountproject.models.interfaces.MemberSv defined in @EnableMongoRepositories declared on AccountProjectApplication:     Invocation of init method failed; 
nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract com.example.accountproject.documents.MemberDTO com.example.accountproject.models.interfaces.MemberSv.membersave(com.example.accountproje ct.documents.MemberDTO)! Reason: No property membersave found for type MemberDTO! Did you mean 'memberName'?; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property membersave found for type MemberDTO! Did you mean 'memberName'?

用于设置凭据的配置文件在哪里?

首先,您无法通过 MongoRepository 保存 MemberDTO。您需要保留实体对象而不是 POJO。

您需要添加一个MongoDB配置 通过将配置class注释为@EnableMongoRepositories

最后,您需要确保已创建 collection (the MongoDB equivalent of a table in SQL) in MongoDB to persists the Member Document(MongoDB 相当于 SQL 中 table 中的记录)

  1. MongoDB配置class.
@Configuration
@EnableTransactionManagement
@EnableMongoRepositories(basePackages = {"com.example.accountproject.models"})
@PropertySource({"classpath:application.properties"})
public class MongoDBConfiguration{

    @Value("${spring.data.mongodb.host}") // set host in application.properties file
    private String mongoHost; 
    
    @Value("${spring.data.mongodb.port}") // set port in application.properties file
    private int mongoPort;
    
    @Value("${spring.data.mongodb.database}") // set DB name in application.properties file
    private String mongoDatabase;

    @Value("${spring.data.mongodb.user}") // set user in application.properties file
    private String mongoUser;

    @Value("${spring.data.mongodb.password}") // set password in application.properties file
    private String mongoPassword;

    @Bean
    public MongoDbFactory mongoDbFactory() {
        MongoCredential mongoCredential = MongoCredential.createCredential(mongoUser, mongoDatabase, mongoPassword.toCharArray());
        ServerAddress serverAddress = new ServerAddress(mongoHost, mongoPort);
        MongoClient mongoClient = new MongoClient(serverAddress, Arrays.asList(mongoCredential));
        return new SimpleMongoDbFactory(mongoClient, mongoDatabase);
    }

    @Bean
    public MongoTemplate mongoTemplate(@Autowired MongoDbFactory mongoDbFactory) {
        MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory);
        return mongoTemplate;
    }
}

并删除 AccountProjectApplication class

中的 @EnableMongoRepositories 注解
  1. 为实体Member引入一个新模型class(假设集合名称是'register')
 @Document(collection = 'register')
 public class Member{
     @Id
     private String memberId;
     private String memberPwd;
     private String memberName;
     private String memberEName;
     private String memberCompany;
     private String memberPhone;
     private String memberZipCode;
     private String memberAddress;
     private String memberAddressDetail;
     private String memberAuth;
     @CreatedDate
     private Date createdDate;

     //getters and setters

}
  1. 会员控制器
 @Controller
 @RequestMapping("/member")
 public class MemberController {


     @Autowired
     private MemberSvImp memberService;

     @RequestMapping(value = "/join", method = RequestMethod.POST)
     public String membersave(MemberDTO memberDTO)
     {
         memberService.membersave(memberDTO);
         return "join_form";
     }
 }

  1. 服务层
@Service 
@Transactional 
public class MemberSvImp {

    @Autowired
    private MemberSv memberSv;

    public Member membersave(MemberDTO memberDTO){
        Member member = new Member();
        //set member attributes through memberDTO
        //ex : member.setMemberName=memeberDTO.getMemeberName(); 
        return memberSv.save(member);
    }

}
  1. 存储库 Class 的基础实体应更改为 Member
@Repository
public interface MemberSv extends MongoRepository<Member, String> {
    //you can call save(Entity) or saveAndFlush(Entity) of JPARespository directly without defining any custom methods to save new member. 
}

建议 : 如果您可以重命名存储库和服务 class 以显示它们的用途,那就更好了

MemberSv -> MemberRespository

MemberSvImp -> 会员服务