Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Java Spring: Field postRepository in BlogController required a bean of type 'PostRepository' that could not be found

bio norica Ученик (80), на голосовании 1 год назад
Здравствуйте!
Делаю spring boot mvc приложение.
Выскакивает такая ошибка:


 2023-03-01 14:47:48.697 ERROR 4176 --- [  restartedMain] o.s.b.d.LoggingFailureAnalysisReporter   :   

***************************

APPLICATION FAILED TO START

***************************

Description:

Field postRepository in com.example.demo.controllers.BlogController required a bean of type 'com.example.demo.repo.PostRepository' 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.example.demo.repo.PostRepository' in your configuration.
Process finished with exit code 1


BlogCotroller:
 package com.example.demo.controllers; 

import com.example.demo.models.Post;
import com.example.demo.repo.PostRepository;
import javafx.geometry.Pos;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartException;

import java.util.ArrayList;
import java.util.Optional;

@Controller
public class BlogController {

@Autowired
private PostRepository postRepository;

@GetMapping("/blog")
public String name(Model model, String name) {
Iterable posts = postRepository.findAll();
model.addAttribute("posts", posts);
return "blogmain";
}
}

PostRepository :
 package com.example.demo.repo; 

import com.example.demo.models.Post;
import org.springframework.data.repository.CrudRepository;

public interface PostRepository extends CrudRepository {}
DemoApplication.java:
 package com.example.demo; 

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
@ComponentScan(basePackages = "com.example.demo")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}

Структура приложения:
 src/main/java/com/example/demo 
|_controllers
|_BlogController.java
|_MainController.java
|_models
|_[...]
|_repo
|_PostRepository.java
|_templates
|_[...]
|_DemoApplication.java
Помогите пожалуйста!
Не очень силён в java spring boot, только изучаю.
Голосование за лучший ответ
Бодрый Гуру (3323) 1 год назад
Вот же хрень. Так думатцо, что postRepository не объявлен бином.
Зеленая бяка Просветленный (41308) 1 год назад
Меня смущает
 (exclude={DataSourceAutoConfiguration.class}) 
оно реально нужно? Попробуй убрать и запустить.
Гуру Знаток (352) 1 год назад
Здравствуйте!

Ошибка возникает из-за того, что Spring не может найти бин PostRepository для автоматического связывания (autowiring) с полем postRepository в вашем BlogController.

Для того чтобы Spring создал и предоставил экземпляр PostRepository, необходимо добавить аннотацию @Repository в ваш интерфейс PostRepository.

Также убедитесь, что у вас есть соответствующая зависимость в файле pom.xml (или build.gradle, если вы используете Gradle), которая автоматически создает реализацию интерфейса PostRepository во время выполнения.

Вы можете добавить зависимость для Spring Data JPA, которая содержит необходимые классы и конфигурации для работы с репозиториями:

Maven:

   

org.springframework.data

spring-data-jpa


Gradle:
 implementation 'org.springframework.data:spring-data-jpa'  

Кроме того, у вас есть два варианта использования @ComponentScan. Вы можете либо указать пакет, в котором следует искать компоненты (контроллеры, сервисы, репозитории и т.д.), например:
 @ComponentScan("com.example.demo")  

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

public class DemoApplication {

// ...

}


Либо вы можете указать несколько пакетов в массиве:
 @ComponentScan(basePackages = {"com.example.demo.controllers", "com.example.demo.repo"})  

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

public class DemoApplication {

// ...

}

Обратите внимание, что классы должны быть находиться в пакетах, указанных в @ComponentScan.

Надеюсь, это поможет вам решить проблему!
Похожие вопросы