2016-03-17 2 views
3

Я реализую Rest API с Spring Boot. Поскольку классы сущности из пакета из другого пакета, я должен был указать это с аннотацией EntityScan. Кроме того, я использовал EnableJpaRepositories, чтобы указать пакет, в котором определен репозиторий JPA. Вот что мой проект выглядит следующим образом:«Отсутствие квалификационного компонента типа» для репозитория JPA в Spring Boot

enter image description here

//Application.java 

@Configuration 
@EnableAutoConfiguration 
@ComponentScan 
@EntityScan("org.mdacc.rists.cghub.model") 
@EnableJpaRepositories("org.mdacc.rists.cghub.ws.repository") 

В моем классе контроллера у меня был объект SeqService autowired.

//SeqController.java 

@Autowired private SeqService seqService; 

@RequestMapping(value = "/api/seqs", method = GET, produces = APPLICATION_JSON_VALUE) 
public ResponseEntity<List<SeqTb>> getSeqs() { 
    List<SeqTb> seqs = seqService.findAll(); 
    return new ResponseEntity<List<SeqTb>>(seqs, HttpStatus.OK); 
} 

SeqService представляет собой интерфейс, из которого я создал класс Bean для этого SeqServiceBean. В SeqServiceBean я autowired репозиторий JPA:

// SeqServiceBean.java 

@Autowired private SeqRepository seqRepository; 

@Override 
public List<SeqTb> findAll() { 
    List<SeqTb> seqs = seqRepository.findAll(); 
    return seqs; 
} 

//SeqRepository.java 

@Repository 
public interface SeqRepository extends JpaRepository<SeqTb, Integer> { 

    @Override 
    public List<SeqTb> findAll(); 

    public SeqTb findByAnalysisId(String analysisId); 
} 

Однако приложение не удалось запустить из-за следующей ошибки:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.mda.rists.cghub.ws.repository.SeqRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1373) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1119) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 

Я не понимаю эту ошибку. Что это связано с квалификационным компонентом?

+0

В основном это говорит о том, что он не может найти подходящий экземпляр «SeqRepository» для autowire. Добавьте структуру проекта и код, связанный с репозиторием. –

+0

refactor Application.java аннотации удалить все использовать это @SpringBootApplication @EntityScan ({"org.mdacc.rists.cghub.model"}) @EnableJpaRepositories (basePackages = {"org.mdacc.rists.cghub.ws.repository" }) –

+0

@kakashi hatake попробовал то, что вы предложили, и по-прежнему та же ошибка – Nasreddin

ответ

6

Вы сканировали неправильный пакет в своем EnableJpaRepositories. Нет org.mdacc.rists.cghub.ws.repository. Таким образом, использовать вместо этого:

@EnableJpaRepositories("org.mda.rists.cghub.ws.repository") 

Spring Загрузочный не требует какого-либо конкретного макета кода для работы, однако, есть некоторые рекомендации, которые помогут вам. Ознакомьтесь с spring boot documentation о лучших методах структурирования вашего кода.

Смежные вопросы

 Смежные вопросы