2015-10-09 8 views
9

私は春の学習から始め、データベースを作成し、値を挿入し、次にWebブラウザでプリントする基本的なプロジェクトを作成します。 私の問題は、メインクラスのような同じパッケージにRestControllerを置いてもOKですが、他のパッケージに配布したいのですが、新しいパッケージを作成するときにRestControllerを動かすと動作しません。説明会ってみましょう:他のパッケージの@RestControllerは動作しません

  |-Springtestv_01 
      |-src/main/java 
       |--com.person <-- it's a main package 
       |-Main.java 
       |-Person.java 
       |-PersonLineRunner.java 
       |-PersonRepository.java 
       |-PersonController.java 
       |-com.controller <-- second package, I want put here PersonController.java 
      |-src/main/resources 
       |-data.sql 
      pom.xml 

私のコントローラはなります:

私のプロジェクトは次のようになります

@RestController 
public class PersonController { 

    @Autowired PersonRepository personRepository; 

    @RequestMapping("/persons") 
    Collection<Person> persons(){ 
     return this.personRepository.findAll(); 
    } 
} 

すべてがcom.personパッケージである、私は、Webブラウワーhttp://localhost:8080/personsに書いて、それが正常に動作します。.. 。 しかし、PersonController.javacom.controllerパッケージに移動したいのですが、移動したとき、私のウェブブラウザーが私に電話します

予期しないエラーが発生しました(type = Not Found、status = 404)。メッセージはありません 利用可能

私はそれを修復するために何をすべきか分かりません。たぶん私は何かを私のpom.xmlで変えなければならないでしょうか?

私のpom.xmlそれが自動的に生成され

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.person</groupId> 
    <artifactId>person</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>SpringTest_v0_1</name> 
    <description>Demo project for Spring Boot</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.3.0.BUILD-SNAPSHOT</version> 
     <relativePath/> <!-- lookup parent from repository --> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <java.version>1.8</java.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>com.h2database</groupId><artifactId>h2</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId> 
       spring-boot-starter-data-elasticsearch 
      </artifactId> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 

    <repositories> 
     <repository> 
      <id>spring-snapshots</id> 
      <name>Spring Snapshots</name> 
      <url>https://repo.spring.io/snapshot</url> 
      <snapshots> 
       <enabled>true</enabled> 
      </snapshots> 
     </repository> 
     <repository> 
      <id>spring-milestones</id> 
      <name>Spring Milestones</name> 
      <url>https://repo.spring.io/milestone</url> 
      <snapshots> 
       <enabled>false</enabled> 
      </snapshots> 
     </repository> 
    </repositories> 
    <pluginRepositories> 
     <pluginRepository> 
      <id>spring-snapshots</id> 
      <name>Spring Snapshots</name> 
      <url>https://repo.spring.io/snapshot</url> 
      <snapshots> 
       <enabled>true</enabled> 
      </snapshots> 
     </pluginRepository> 
     <pluginRepository> 
      <id>spring-milestones</id> 
      <name>Spring Milestones</name> 
      <url>https://repo.spring.io/milestone</url> 
      <snapshots> 
       <enabled>false</enabled> 
      </snapshots> 
     </pluginRepository> 
    </pluginRepositories> 

</project> 

のように見える、私は@SpringBootApplication注釈を使用した唯一の1つの依存関係

<dependency> 
     <groupId>com.h2database</groupId><artifactId>h2</artifactId> 
    </dependency> 
+0

spring context.xmlを追加してください。 – Natalia

+0

私は、com.personというパッケージのコンポーネントスキャンを定義していますが、他のパッケージは検索していないと思います。 – hotzst

+0

ここで、他のpakcageのコンポーネントスキャンを定義できますか? – czArek

答えて

26

使用basePackages:

@ComponentScan(basePackages = { "com.person","com.controller"}) 
+1

どこに書きますか?私の 'Main.java'では? – czArek

+5

'@SpringBootApplication @ComponentScan({ "com.person"、 "com.controller"}) パブリッククラスメイン{ パブリック静的無効メイン(文字列[] args){ SpringApplication.run(Main.class、引数) ; } } 私はUのように追加して動作します!ありがとう! :) – czArek

+0

変数 'basePackages'が必要ですか? – czArek

3

@Configuration@EnableAutoConfiguration@ComponentScanを使用するのと同じです書き込み。

ComponentScanが @Configurationクラスで使用するためのコンポーネントのスキャン・ディレクティブを設定します。ドキュメントから

。 Spring XMLの 要素と並行してサポートを提供します。

basePackageClasses()、basePackages()またはその別名value()のいずれかを指定して、スキャンする特定のパッケージを定義することができます。特定のパッケージ が定義されていない場合は、 この注釈を持つクラスのパッケージからスキャンが行われます。

あなたがやったようにそれを移動したり@ComponentScanbasePackagesを指定することができます。

1

我々は@ComponentScan (basePackages = {"include your package name here"})を使用することができます。

共通のパッケージ命名形式を使用している場合は、@ComponentScan(basePackages = { "com.*"}のように、パッケージ名の共通部分だけを*とすることで、共通のパッケージ名を持つすべてのパッケージがスキャンされます。

3

私は同じ問題を抱えていましたが、ここで提供されている回答は私には役立ちましたが、別の春の注釈を追加しなければならず、多くのリポジトリを扱う場合にはもっと一般的です。 私たちは、次の構造を持っている:これは、私は同じ問題を抱えていたが、突然、mainメソッドでそれは私のApplication.javaクラス(クラス発見し、目のメイン

@SpringBootApplication(scanBasePackages = {"com.person"}) 
@EnableMongoRepositories(basePackages = "com.person.repositories") 
public class MainDemoApplication { // 
} 
0

に追加する必要があります

|-src/main/java 
    |--com.person 
     |--repositories 
     |--controllers 
     |--... 

を@SpringBootApplicationアノテーション)は、@Controllerクラスとは異なる並列パッケージにあります。

Application.javaクラスは、他のすべてのパッケージと同じか、または上にある必要があります。次に、@ComponentScanは不要で、すべてのBeanは自動的にスキャンされます。たとえば、Application.javaがcom.personにあり、すべてのアプリケーションBeanがcom.personにある場合、@ComponentScanなしで動作します。

関連する問題