@RestController im anderen Paket nicht funktioniert
Fange ich mit dem lernen Frühling und ich erstelle basic-Projekt wird erstellt, Datenbank, Werte einfügen und weiter drucken im web browser.
Mein problem ist, dass wenn ich RestController im gleichen Paket wie die Hauptklasse - das ist auch OK, aber ich wollen, verteilen Sie an andere Paket und wenn ich neues Paket erstellen, bewegen Sie den RestController es funktioniert nicht. Lassen Sie trafen erklären:
Mein Projekt sieht wie folgt aus:
|-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
Mein controller sieht:
@RestController
public class PersonController {
@Autowired PersonRepository personRepository;
@RequestMapping("/persons")
Collection<Person> persons(){
return this.personRepository.findAll();
}
}
Wenn alles in com.person
- Paket, Schreibe ich in der web-brower http://localhost:8080/persons und es funktioniert einwandfrei...
Aber ich Will Bewegung PersonController.java
zu com.controller
Paket, und wenn ich es verschoben, meine webbrowers ruft mich
Es wurde ein unerwarteter Fehler (Typ=Nicht Gefunden, status=404). Keine Meldung
verfügbar
und ich habe keine Ahnung was ich tun sollte, um es zu reparieren. Vielleicht sollte ich etwas ändern in meinem pom.xml
??
Meine pom.xml sieht aus wie
<?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>
Es wird automatisch generiert, ich Schreibe nur eine Abhängigkeit
<dependency>
<groupId>com.h2database</groupId><artifactId>h2</artifactId>
</dependency>
Meine Vermutung ist, das Sie definiert haben, eine scan-Komponente für das Paket
com.person
aber nicht mit anderen Paketen.Wo kann ich definieren, der eine Komponente scan für andere pakcage ?
Sind Sie mit spring-boot? Verwenden Sie xml-Konfiguration oder annotation-Konfiguration?
Ja, ich bin mit spring-boot. Meine Konfiguration ist auf
pom.xml
InformationsquelleAutor CeZet | 2015-10-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden basePackages:
Main.java
?@SpringBootApplication @ComponentScan({"com.person","com.controller"}) public class Main { public static void main(String[] args) { SpringApplication.run(Main.class, args); } }
Ich hinzufügen, wie U sehen und es funktioniert !! DANKE ! 🙂Die variable
basePackages
ist notwendig, um etwas ?Hallo, ich will wissen, warum und Wann sollten wir hinzufügen müssen Basis-Pakete lik diese für welche Art von Anmerkungen mit zu arbeiten?
InformationsquelleAutor question_maven_com
Ich hatte das gleiche problem, die Antworten hier für mich gearbeitet, aber ich musste hinzufügen eine andere Quelle Anmerkung, und es ist mehr allgemein bei dem Umgang mit einer Menge von repositories.
Wir haben die folgende Struktur :
Diese dann aufgenommen werden sollte, in th main
InformationsquelleAutor DevRj
Mit einem
@SpringBootApplication
annotation entspricht der Verwendung@Configuration
,@EnableAutoConfiguration
und@ComponentScan
.Aus der Dokumentation:
Können Sie entweder verschieben Sie es, wie Sie, oder geben Sie
basePackages
im@ComponentScan
.InformationsquelleAutor spm
Wir können
@ComponentScan (basePackages = {"include your package name here"})
.Auch wenn Sie einige gemeinsame Paket-Benennung-format, dann können wir auch nur gemeinsam ein Teil des Pakets Namen mit
*
wie@ComponentScan(basePackages = { "com.*"}
, so dass alle Pakete mit, dass der gemeinsame-package-name wird gescannt.InformationsquelleAutor Adimax
Ich hatte das gleiche problem, aber plötzlich festgestellt, dass mein Application.java Klasse (die Klasse mit der main-Methode und @SpringBootApplication annotation), die sich in verschiedenen, aber parallelen Paket mit @Controller-Klasse.
Die Sache ist, dass Application.java Klasse sollte in der gleichen oder auf der Oberseite der alle anderen Pakete, dann brauchen wir ja nicht @ComponentScan und alle Bohnen werden automatisch gescannt werden. Zum Beispiel: wenn Application.java befindet sich in com.person und alle Anwendungs-Bohnen befindet sich in com.person, dann funktioniert es ohne @ComponentScan.
InformationsquelleAutor Denys
Als derjenige, der gerungen hat mit dem Problem, wenn Sie finden, sofern die Lösung nicht funktioniert hat.
Bitte prüfen Sie, ob Sie legen Quell-Dateien auf der root-Ebene direkt, zum Beispiel
src\main\java\xxx.java
Es hat negative Auswirkungen auf Projekt, aber ich weiß nicht die Ursache. Trotzdem,
Bitte legen Sie Quell-Dateien um mindestens ein selbst erstelltes Paket wie:
src\main\java\pack1\xxx.java
Probieren Sie auch andere Einstellungen wieder. Es hat mein problem zu lösen.
InformationsquelleAutor Gearon
Sie einfach nur definieren Sie ein package-Namen in @ComponentScan
wie :
- und update-Projekt nach, dass:- Rechtsklick auf Dein Projekt - > maven - > update Projekt
InformationsquelleAutor Geet Thakur