You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot Get请求失败求助:Controller包切换后无法访问接口

解决Spring Boot跨同级包Controller无法访问的问题

这是个很常见的Spring Boot新手问题,原因其实和它的默认包扫描规则有关,我来帮你拆解一下:

问题根源

Spring Boot的@SpringBootApplication注解(你的主启动类上肯定加了这个)默认只会扫描主启动类所在的包,以及该包下的所有子包里的Spring组件(比如@Controller、@Service这些衍生注解)。

假设你的主启动类是在com.pack1包下(比如叫com.pack1.SpringBootApplication),那com.pack2是和com.pack1同级的包,不在默认的扫描范围内。所以你把Controller移到com.pack2后,这个类根本没被Spring容器注册,自然访问接口时会出现Whitelabel错误页。

三种解决办法

1. 调整主启动类的位置(最推荐)

把你的主启动类移到com包下(也就是com.pack1和com.pack2的共同父包),比如改成com.Application。这样Spring Boot会自动扫描com下的所有子包,不管是pack1还是pack2里的Controller都会被正常加载。

2. 用@ComponentScan指定扫描包

在你的主启动类上添加@ComponentScan注解,明确指定要扫描的包:

import org.springframework.context.annotation.ComponentScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@ComponentScan(basePackages = {"com.pack1", "com.pack2"})
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

3. 直接扩展@SpringBootApplication的扫描范围

因为@SpringBootApplication本身就包含了@ComponentScan的功能,所以也可以直接用它的scanBasePackages属性来指定:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication(scanBasePackages = {"com.pack1", "com.pack2"})
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

这三种方法都能解决你的问题,第一种调整包结构的方式最符合Spring Boot的最佳实践,建议优先考虑~

内容的提问来源于stack exchange,提问作者Ramesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:29:40