创建名称为 '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 进行简单的会员注册,但是出现错误,我提出了一个问题。
我的源代码
会员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;
}
会员控制器
@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";
}
}
MemberSv
@Repository
public interface MemberSv extends MongoRepository<MemberDTO, String> {
MemberDTO membersave(MemberDTO memberDTO);
}
MemberSvImp
@Service
@Transactional
public class MemberSvImp {
@Autowired
private MemberSv memberSv;
public MemberDTO membersave(MemberDTO memberDTO) {
return memberSv.save(memberDTO);
}
}
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);
}
}
错误
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 中的记录)
- 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
注解
- 为实体
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
}
- 会员控制器
@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";
}
}
- 服务层
@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);
}
}
- 存储库 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 -> 会员服务
我是学生java。我想使用 Spring boot mongoDB 进行简单的会员注册,但是出现错误,我提出了一个问题。 我的源代码
会员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; }
会员控制器
@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"; } }
MemberSv
@Repository public interface MemberSv extends MongoRepository<MemberDTO, String> { MemberDTO membersave(MemberDTO memberDTO); }
MemberSvImp
@Service @Transactional public class MemberSvImp { @Autowired private MemberSv memberSv; public MemberDTO membersave(MemberDTO memberDTO) { return memberSv.save(memberDTO); } }
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); } }
错误
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 中的记录)
- 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
注解
- 为实体
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
}
- 会员控制器
@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";
}
}
- 服务层
@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);
}
}
- 存储库 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 -> 会员服务