Я получаю эту ошибку: `
***************************
APPLICATION FAILED TO START
***************************
Description:
Field questionDao in com.surbhi.quizapp.service.QuestionService required a bean of type 'com.surbhi.quizapp.dao.QuestionDao' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type 'com.surbhi.quizapp.dao.QuestionDao' in your configuration.
` У меня есть следующая файловая структура и файлы.
Структура файла: https://i.sstatic.net/8jSrf.png
ВопросService.java
@Service
public class QuestionService {
QuestionDao questionDao;
public QuestionService(QuestionDao questionDao) {
super();
this.questionDao = questionDao;
}
public ResponseEntity<List<Question>> getAllQuestions() {
try {
return new ResponseEntity<>(questionDao.findAll(), HttpStatus.OK);
} catch (Exception e) {
e.printStackTrace();
}
return new ResponseEntity<>(new ArrayList<>(), HttpStatus.BAD_REQUEST);
}
public ResponseEntity<List<Question>> getQuestionsByCategory(
String category
) {
try {
return new ResponseEntity<>(
questionDao.findByCategory(category),
HttpStatus.OK
);
} catch (Exception e) {
e.printStackTrace();
}
return new ResponseEntity<>(new ArrayList<>(), HttpStatus.BAD_REQUEST);
}
public ResponseEntity<String> addQuestion(Question question) {
questionDao.save(question);
return new ResponseEntity<>("success", HttpStatus.CREATED);
}
}
ВопросDao.java
@Repository
public interface QuestionDao extends JpaRepository<Question, Integer> {
List<Question> findByCategory(String category);
@Query(
value = "SELECT * FROM question q Where q.category=:category ORDER BY RANDOM() LIMIT :numQ",
nativeQuery = true
)
List<Question> findRandomQuestionsByCategory(String category, int numQ);
}
Я также пробовал удалить @Autowire и создать конструктор, но это тоже не сработало и выдало эту ошибку.
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of constructor in com.surbhi.quizapp.service.QuestionService required a bean of type 'com.surbhi.quizapp.dao.QuestionDao' that could not be found.
Action:
Consider defining a bean of type 'com.surbhi.quizapp.dao.QuestionDao' in your configuration.
Что делать, также добавлено
@SpringBootApplication(scanBasePackages = { «com.surbhi.quizapp.controller», «com.surbhi.quizapp.dao», «com.surbhi.quizapp.model», «com.surbhi.quizapp.service»})
в основном, но это тоже не работает.
Использовал @ComponentScan, не работает
Основной файл класса:
@SpringBootApplication
@ComponentScan("com.surbhi.quizapp.dao")
public class QuizappApplication {
public static void main(String[] args) {
SpringApplication.run(QuizappApplication.class, args);
}
}
Пробовали ли вы добавить @ComponentScan("com.surbhi.quizapp.dao") в основной класс приложения?
Да, тоже не работает.
я начну с комментария findRandomQuestionsByCategory, если это сработает, вы знаете, в чем ваша проблема
Я прокомментировал findRandomQuestionsByCategory, но это ничего не меняет, выдавая ту же ошибку.
Не уверены, используете ли вы Maven/Gradle и т. д., но, возможно, проверьте файл pom.xml или build.gradle на предмет ваших зависимостей. Вам следует использовать Spring-boot-starter-data-jpa, а не Spring-data-JPA. Просто идея
Это странно. Когда путь сканирования указан с помощью @SpringBootApplication(scanBasePackages = {""}), он работает без проблем при воспроизведении со структурой пакета спрашивающего. Переместите класс QuizappApplication в начало пакета и измените его для сканирования подпакетов.
Добавьте @EnableJpaRepositories в свое приложение для сканирования репозиториев. AFAIK jparepos не обнаруживаются при сканировании компонентов.




Глядя на загруженную вами фотографию упаковки, кажется, что там два QuizappApplication класса. (com.surbhi.quizapp, com.surbhi.quizapp.service)
Возникнет ли та же проблема, если я удалю класс QuizappApplication, существующий в пакете com.surbhi.quizapp.service, и напишу его следующим образом?
@SpringBootApplication
public class QuizappApplication {
public static void main(String[] args) {
SpringApplication.run(QuizappApplication.class, args);
}
}
Кроме того, аннотация @Repository не требуется в интерфейсе QuestionDao.
Не публикуйте изображения кода. И вот почему: Meta.stackoverflow.com/a/285557/1847378