Kotlin SpringBoot Gradle项目Java Controller接口返回404问题求助
Spring Boot Kotlin项目Java Controller无法识别解决方案
根因说明
默认通过Spring Initializr生成的Kotlin + Gradle项目,未内置Java编译支持,Java源码不会被自动编译加载到项目中,因此Spring无法扫描到对应的Controller组件。
具体修复步骤
1. 修改build.gradle.kts配置,添加Java编译支持
在plugins配置块中新增Java插件,同时补充Java编译参数配置,保证和Kotlin编译的JVM版本一致:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("org.springframework.boot") version "2.5.5" id("io.spring.dependency-management") version "1.0.11.RELEASE" id("java") // 新增Java插件 kotlin("jvm") version "1.5.31" kotlin("plugin.spring") version "1.5.31" } group = "com.example" version = "0.0.1-SNAPSHOT" java.sourceCompatibility = JavaVersion.VERSION_11 configurations { compileOnly { extendsFrom(configurations.annotationProcessor.get()) } } repositories { mavenCentral() } dependencies { implementation("org.springframework.boot:spring-boot-starter-web") implementation("com.fasterxml.jackson.module:jackson-module-kotlin") implementation("org.jetbrains.kotlin:kotlin-reflect") implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") compileOnly("org.projectlombok:lombok") annotationProcessor("org.projectlombok:lombok") testImplementation("org.springframework.boot:spring-boot-starter-test") } // 新增Java编译任务配置 tasks.withType<JavaCompile> { sourceCompatibility = "11" targetCompatibility = "11" } tasks.withType<KotlinCompile> { kotlinOptions { freeCompilerArgs = listOf("-Xjsr305=strict") jvmTarget = "11" } } tasks.withType<Test> { useJUnitPlatform() }
2. 校验目录和包路径
- Java Controller必须放在
src/main/java目录下,Kotlin代码保持在src/main/kotlin目录,两个目录均为项目的源码根目录 - Java Controller的包名必须和Spring Boot启动类的包名保持同级或子级关系,如果放在其他包下,需要在启动类上添加
@ComponentScan(basePackages = ["启动类所在包", "Java Controller所在包"])手动指定扫描路径
3. 额外注意项
你提供的Java Controller示例使用的是@PostMapping("/"),测试时需要用POST请求访问根路径,用GET请求访问也会返回404,注意请求方法和接口定义匹配。
修改完成后刷新Gradle配置,重启项目即可正常访问Java Controller的接口。
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

