在使用Java和Gradle学习和实现多模块项目时,我在发出请求时遇到以下错误:Postman
{
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/tasks/hello"
}
当运行命令“./gradlew:task-service:bootRun”时,项目似乎正常启动“Tomcat在端口上启动:8080(http),上下文路径为“”。但是当我提出请求时,我得到的是“找不到”。我不能说错误在哪里,但我意识到“域”模块的导入不正确,或者我不知道如何配置它。你能帮我吗?
项目及其模块-group 'com.nyuro'
nyuro-backend (root-project)
*domain
*task-service
“域”模块包含实体,例如Task类。服务将是带有@Controller,@Service,@Repository的Sping Boot 应用程序。在这个例子中是“任务服务”。
以下是设置的主要片段。我希望这足以指出一些配置错误。以下是Github上的代码:Project Link Heresettings.gradle(nyuro-backend)
rootProject.name = 'nyuro-backend'
include 'domain'
include 'task-service'
build.gradle(nyuro-backend)
plugins {
id 'java'
id 'application'
}
group 'com.nyuro'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}
test {
useJUnitPlatform()
}
build.gradle(:domain)
plugins {
id 'java'
id 'application'
}
group 'com.nyuro'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
implementation 'jakarta.persistence:jakarta.persistence-api:3.1.0'
}
test {
useJUnitPlatform()
}
build.gradle(:task-service)
plugins {
id 'java'
id 'application'
id 'org.springframework.boot' version '3.1.0'
id 'io.spring.dependency-management' version '1.1.0'
}
group = 'com.nyuro'
version = '0.0.1-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
runtimeOnly 'com.mysql:mysql-connector-j'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation project(':domain')
}
tasks.named('test') {
useJUnitPlatform()
}
TaskServiceApplication.java
@EntityScan({"com.nyuro.domain"})
@EnableJpaRepositories({"com.nyuro.domain"})
@ComponentScan({"com.nyuro.domain"})
@SpringBootApplication
public class TaskServiceApplication {
public static void main(String[] args) {
SpringApplication.run(TaskServiceApplication.class, args);
}
}
导入domain.models.Task模块时似乎出现问题。我还对@EntityScan、@EnableJpaRepositories、@ComponentScan导入进行了几次测试。无满意结果。
1条答案
按热度按时间vmdwslir1#
您的404 Not Found错误完全来自您的Controller由于SpringBootApplication上的自定义ComponentScan注解而未被拾取,但让我再提出几点:
1.不应该提交
.gradle
、.idea
、build
等。目录到Git。创建一个.gitignore
文件来忽略它们-你有一个,但它在task-service
内部,你应该在根目录下有一个(但你可以有更具体的一些特定的子项目)1.您有2个gradle Package 器(在root和task-service中)-task-service中的 Package 器应该删除
1.我不认为你需要
task-service/settings.gradle
文件。我知道你可能从一个单模块项目开始,然后把它变成了一个多模块项目。1.您正在
com.nyuro.domain
上创建ComponentScan
和EntityScan
,但在这个包中没有类(域类在module
包中),最重要的是@SpringBootApplication
已经在它所在的包上进行了组件扫描。您应该删除@ComponentScan(“com.nyuro.domain”)
,因为它会阻止Spring拾取不在该包下的Controller(SpringBootApplication位于com.nyuro.taskservice
中,控制器位于com.nyuro.taskservice.controllers
中,因此默认的组件扫描将其作为子包拾取)。如果你想扫描更多的软件包,你还需要添加task-service
软件包-@ComponentScan({"com.nyuro.domain", "com.nyuro.taskservice"})
。1.你的数据库设置是不工作的我,我不得不删除它使这个应用程序启动