Получите NoSuchBeanDefinitionException при попытке @Autowire хранилище на контроллере Spring Boot? - PullRequest
0 голосов
/ 04 марта 2019

Я новичок в Spring Boot.Я должен подключить мое приложение к серверу MySQL.Во время создания обратной стороны приложения у меня была проблема с bean-компонентами в Spring.Когда я пытаюсь запустить это на моем сервере, я получаю сообщение об ошибке:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.bagyt.reposotories.UniversityRepository' available: expected at least 1 bean which qualifies as an autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

Это мой класс контроллера

package com.bagyt.controller;
import com.bagyt.exception.ResourceNotFoundException;
import com.bagyt.model.University;
import com.bagyt.repositories.UniversityRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

@RestController
@RequestMapping("/universityApi")
public class UniversityController {

    @Autowired
    UniversityRepository universityRepository;

    @GetMapping("/university")
    public List<University> getAllNotes() {
        return universityRepository.findAll();
    }

    @PostMapping("/university")
    public University createNote(@Valid @RequestBody University note) {
        return universityRepository.save(note);
    }

    @GetMapping("/university/{id}")
    public University getNoteById(@PathVariable(value = "id") Long universityId) {
        return universityRepository.findById(universityId)
                .orElseThrow(() -> new ResourceNotFoundException("University", "id", universityId));
    }

    @PutMapping("/university/{id}")
    public University updateNote(@PathVariable(value = "id") Long universityId,
                           @Valid @RequestBody University universityDetails) {

        University university = universityRepository.findById(universityId)
                .orElseThrow(() -> new ResourceNotFoundException("University", "id", universityId));

        university.setName(universityDetails.getName());
        university.setEmail(universityDetails.getEmail());
        university.setDescription(universityDetails.getDescription());
        university.setPhotoLink(university.getPhotoLink());

        University updatedNote = universityRepository.save(university);
        return updatedNote;
    }

    @DeleteMapping("/university/{id}")
    public ResponseEntity<?> deleteNote(@PathVariable(value = "id") Long universityId) {
        University note = universityRepository.findById(universityId)
                .orElseThrow(() -> new ResourceNotFoundException("University", "id", universityId));

        universityRepository.delete(note);

        return ResponseEntity.ok().build();
    }
}`

Мой репозиторий

package com.bagyt.repositories;

import com.bagyt.model.University;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

    @Repository
    public interface UniversityRepository extends JpaRepository<University, Long> {


    }

У меня естьпроверил и убедился, что ошибка в моей строке @Autowired в контроллере.Спасибо за любую помощь!

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Проверьте, что ваш пакет контроллера является либо тем же пакетом, либо вложенным пакетом класса с @springBootApplication.Если какая-либо зависимость (@ controller, @ Service, @ Repository) находится в другой структуре пакета, используйте @componentscan (укажите имя пакета). Я думаю, что это должно работать.

0 голосов
/ 04 марта 2019

В основной класс Springboot вы можете добавить

@EnableJpaRepositories(basePackages = "com.bagyt.repositories") 
0 голосов
/ 04 марта 2019

Как docs говорит о @SpringBootApplication

@ ComponentScan: включить сканирование @Component для пакета, в котором находится приложение

.означает, что Spring будет искать bean-компоненты в вашем com.bagyt.controller, то есть в том же пакете, где был определен класс, помеченный @SpringBootApplication, и его подпакеты.

Вы должны переместить BagytApplication в com.bagyt пакет, есливы хотите найти компоненты в других пакетах, таких как com.bagyt.repository.

...