2017-04-25 9 views
0

Apache Solrからデータを照会するREST Webサービスを使用しています。私はSolrリポジトリでSpringブート+データを使用しています。 サービス層、リポジトリ層、コントローラ層として相互接続する方法がわかりません。コントローラからサービス層にアクセス

I have the following structure

コントローラー

@RestController 
public class ImageSearchController { 

    private final Logger log = LoggerFactory.getLogger(this.getClass()); 
    @Resource ImageService imageService; 
.... 
} 

メインをSpringBootApplicationする:

@SpringBootApplication 
public class Application extends SpringBootServletInitializer{ 

    public static void main(String[ ] args) { 
     SpringApplication.run(Application.class , args); 
    } 

} 

サービス

public interface ImageService { 

    List<Image> searchTerm(String searchTerm); 
    List<Image> search(String imgSrc , String imgTitle); 
    List<Image> searchByImgSrc(String searchTerm); 
    List<Image> findAll(); 
} 

サービスImplを

@Service 
public class ImageServiceImpl implements ImageService { 

    @Resource 
    private ImageRepository repository; 


    @Override 
    public List<Image> search(String imgSrc , String imgTitle) { 
     return repository.findByImgSrcContainsOrImgTitleContains(imgSrc , imgTitle); 
    } 
.... 
} 

リポジトリ(春データ)

public interface ImageRepository extends SolrCrudRepository< Image , String > { 

    public List<Image> findAll(); 

... 
} 

のpom.xml

<dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-tomcat</artifactId> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/org.apache.solr/solr-solrj --> 
     <dependency> 
      <groupId>org.apache.solr</groupId> 
      <artifactId>solr-solrj</artifactId> 
      <version>5.1.0</version> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-solr --> 
     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-solr</artifactId> 
      <version>2.1.1.RELEASE</version> 
     </dependency> 
    </dependencies> 
... 

    <repositories> 
     <repository> 
      <id>spring-releases</id> 
      <url>https://repo.spring.io/libs-release</url> 
     </repository> 
     <repository> 
      <id>spring-milestone</id> 
      <name>Spring Milestone Maven Repository</name> 
      <url>http://repo.springsource.org/libs-milestone</url> 
     </repository> 
    </repositories> 

Logs of application

サービス層でBeanを作成してコントローラにアクセスするにはどうすればよいですか? 残りのWebサービスでsolrクライアントを設定する方法は?

UPDATE

私は1.4.3から1.5.1への春のブートバージョンをアップグレードし、それが働きました。正直なところ、私は理由を理解していません。 私はsolrにアクセスするときに別のエラーが発生しますが、springデータはsolrの中のコアの名前を複製します。何か案が ?

おかげ

+0

編集:pomファイルを追加 – alves

答えて

0

あなたが唯一の実装を持っている場合は、サービス・インターフェースを必要としない第一。 サービス層のコントローラにはアクセスしませんが、それは逆です。コントローラで>サービス>リポジトリ(あなたのケースでのSolr) コントローラがあなたのAPIを定義し、サービスがあなたのビジネス層とリポジトリを定義し、あなたが外部リソースにアクセスするために使用されなければならないコントローラー(あなたのケースでのSolr)

だから、@Autowireサービスあなたは@Autowireリポジトリ

+0

はい、私は考えました。しかし、私はそれを実装することはできません..前の記事で説明しているエラーを私に教えてください。私はコントローラと残りの層とAppConfigを相互接続する方法を知らない。 – alves

0

まず、あなたはinject your dependenciesです。私はコンストラクタの注入をお勧めします。あなたのケースでは:

@Service 
public class ImageServiceImpl implements ImageService { 

private final ImageRepository repository; 

@Autowired // no necessary in spring 4.3+ 
public ImageServiceImpl(ImageRepository repository) { 
    this.repository = repository; 
} 
+0

回答ありがとうございますが、私は同じ例外を受け取り続けます:UnsatisfiedDependencyException:ファイル '...に定義された' imageSearchController 'という名前のBeanを作成中にエラーが発生しました。' imageServiceImpl 'がファイル内で定義されています。' imageRepository 'コンストラクタパラメータ0で表される依存関係。 NoSuchBeanDefinitionException:タイプ 'java.lang.Class タイプの適格なBeanがありません。使用可能:少なくとも1つのBeanがautowire候補になります。依存関係の注釈:{} – alves

+0

ImageRepositoryに@Repositoryの注釈を付けるようにしてください – sovas

+0

新しい情報を投稿してください – alves

0

ImageRepository-Beanが見つかりませんでした(たぶん、あなたは@EnableJpaRepositoriesを欠場)ので、春には、たBeanFactoryを探しているとタイプ(クラス)のコンストラクタパラメータを必要とするSolrRepositoryFactoryBeanを見つけています。通常@EnableJpaRepositoriesのスキャナはを構成しますが、@EnableJpaRepositoriesが欠けている(または間違って構成されている)限り、ImageRepositoryを構築できませんでした。

修正:

  • Application@EnableJpaRepositoriesを追加し、注釈のパラメータを設定します。
関連する問題