Spring BootでRest APIを実装しています。私のエンティティークラスは別のパッケージのパッケージからのものであるため、注釈EntityScan
でそれを指定する必要がありました。また、EnableJpaRepositories
を使用して、JPAリポジトリが定義されているパッケージを指定しました。私のプロジェクトは次のようになります。
//Application.Java
@Configuration
@EnableAutoConfiguration
@ComponentScan
@EntityScan("org.mdacc.rists.cghub.model")
@EnableJpaRepositories("org.mdacc.rists.cghub.ws.repository")
コントローラークラスでは、SeqServiceオブジェクトが自動配線されていました。
//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
は、そのSeqServiceBean
のBeanクラスを作成したインターフェイスです。 SeqServiceBean
で、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]
エラーがわかりません。資格のあるBeanとは何の関係がありますか?
EnableJpaRepositories
で間違ったパッケージをスキャンしていました。 org.mdacc.rists.cghub.ws.repository
パッケージはありません。したがって、代わりにこれを使用してください:
@EnableJpaRepositories("org.mda.rists.cghub.ws.repository")
Spring Bootでは、特定のコードレイアウトを機能させる必要はありませんが、役立つベストプラクティスがいくつかあります。コードの構造化のベストプラクティスについては、 spring boot documentation をご覧ください。