代码之家  ›  专栏  ›  技术社区  ›  Supriya Maity

需要一个“com.supriya.banking.repository”类型的bean。找不到AccountRepository

  •  0
  • Supriya Maity  · 技术社区  · 1 年前

    应用程序启动失败


    说明:

    com.supriya.banking.service中的字段帐户存储库。AccountService需要类型为“com.supriya.banking.repository”的bean。找不到AccountRepository。

    注射点有以下注释: -@org.springframework.beans.factory.commentation。自动连线(必填=真)

    行动:

    考虑定义一个“com.supriya.banking.repository”类型的bean。配置中的AccountRepository。

    为什么它要求创建bean,它不应该自己创建吗?

    build.gradle

    plugins {
        id 'java'
        id 'org.springframework.boot' version '3.3.2'
        id 'io.spring.dependency-management' version '1.1.6'
    }
    
    group = 'com.supriya'
    version = '0.0.1-SNAPSHOT'
    
    java {
        toolchain {
            languageVersion = JavaLanguageVersion.of(17)
        }
    }
    
    configurations {
        compileOnly {
            extendsFrom annotationProcessor
        }
    }
    
    repositories {
        google()
        mavenCentral()
    }
    
    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-web'
        compileOnly 'org.projectlombok:lombok'
        annotationProcessor 'org.projectlombok:lombok'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
        testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
        implementation group: 'org.springframework.data', name: 'spring-data-mongodb', version: '4.3.1'
    }
    
    tasks.named('test') {
        useJUnitPlatform()
    }
    

    application.properties

    spring.application.name=banking
    
    # mongoDB configuration
    spring.data.mongodb.host=localhot
    spring.data.mongodb.port=27017
    spring.data.mongodb.database=bank
    

    存储库

    package com.supriya.banking.repository;
    
    import com.supriya.banking.model.Account;
    import org.springframework.data.mongodb.repository.MongoRepository;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public interface AccountRepository extends MongoRepository<Account, String> {
    
    }
    

    售后服务

    package com.supriya.banking.service;
    
    import com.supriya.banking.exception.AccountNotPresentException;
    import com.supriya.banking.exception.DuplicateEntryException;
    import com.supriya.banking.model.Account;
    import com.supriya.banking.repository.AccountRepository;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    import java.util.Optional;
    
    @Service
    public class AccountService {
    
        @Autowired
        private AccountRepository accountRepository;
    
        public void add(Account account) throws DuplicateEntryException {
            Optional<Account> account1 = accountRepository.findById(account.getAccountNumber());
            if (account1.isPresent()) throw new DuplicateEntryException("Duplicate Entry...");
            accountRepository.save(account);
        }
    
        public List<Account> getAllAccounts() {
            return accountRepository.findAll();
        }
    
        public Account getAccountByAccountNumber(String accountNumber) throws AccountNotPresentException {
            Optional<Account> account = accountRepository.findById(accountNumber);
            if (account.isEmpty()) throw new AccountNotPresentException("Account number does not exists...");
            return account.get();
        }
    }
    

    控制器

    package com.supriya.banking.controller;
    
    import com.supriya.banking.exception.AccountNotPresentException;
    import com.supriya.banking.exception.DuplicateEntryException;
    import com.supriya.banking.model.Account;
    import com.supriya.banking.service.AccountService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.List;
    
    @RestController
    @RequestMapping("/banking")
    public class AccountController {
    
        @Autowired
        private AccountService accountService;
    
        @PostMapping("/add")
        public ResponseEntity<String> addDetails(@RequestBody Account account) throws DuplicateEntryException {
            accountService.add(account);
            return new ResponseEntity<>("Success", HttpStatus.CREATED);
        }
    
        @GetMapping("all")
        public ResponseEntity<List<Account>> getAllAccounts() {
            return new ResponseEntity<>(accountService.getAllAccounts(), HttpStatus.OK);
        }
    
        @GetMapping("{accountNumber}")
        public ResponseEntity<Account> getByAccountNumber(@PathVariable("accountNumber") String account) throws AccountNotPresentException {
            return new ResponseEntity<>(accountService.getAccountByAccountNumber(account), HttpStatus.OK);
        }
    }
    

    实体

    package com.supriya.banking.model;
    
    import lombok.*;
    import org.springframework.data.annotation.Id;
    import org.springframework.data.mongodb.core.mapping.Document;
    
    @Builder
    @Getter
    @Setter
    @ToString
    @Document(collation = "account")
    public class Account {
    
        @Id
        private String accountNumber;
    
        private String accountHolderName;
    
        private long accountBalance;
    }
    

    通过stackoverflow的一些解决方案,没有得到解决

    1 回复  |  直到 1 年前
        1
  •  0
  •   J Asgarov    1 年前

    使用版本集删除您自己对mongodb的依赖,并添加以下行:

    implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
    

    一般使用 start.spring.io 用于定义与spring相关的依赖关系