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

Spring Boot @RestController接口访问返回WhiteLabel Error Page问题

问题原因

Spring Boot 默认的组件扫描规则是:主启动类(即带@SpringBootApplication注解的DemoApplication类)只会扫描自身所在包及其子包下,被@Component、@RestController、@Service等Spring衍生注解标记的类,注册为容器内的Bean。
从现有代码和pom配置看,项目初始化时DemoApplication默认生成在com.example.demo包下,但你写的Student实体类、StudentController控制器类都放在独立的student包下,和启动类所在包既不同根也不是子包关系。Spring启动时完全扫描不到StudentController上的@RestController注解,不会注册/api/student/all对应的路由,访问接口时就会返回404状态,触发默认的WhiteLabel Error错误页,整个启动过程不会有任何报错提示。
另外还有一个潜在问题:当前Student类只定义了全参构造方法,没有无参构造,等路由正常注册后,Jackson做JSON序列化时可能抛出序列化失败异常。

修复方案

二选一即可,优先选第一种,符合Spring Boot官方推荐的项目结构规范,后续扩展JPA、配置类等功能时不会出额外的扫描问题:

  • 方案一(推荐):调整项目包结构,把Student、StudentController移动到DemoApplication所在包的子包下,即把两个类的包声明从package student;改成package com.example.demo.student;,类文件移动到src/main/java/com/example/demo/student目录下。调整后无需加任何额外配置,Spring会自动扫描到所有业务组件。
  • 方案二:如果不想调整现有包结构,在DemoApplication类上添加注解手动指定扫描路径,示例代码如下:
package com.example.demo;

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

@SpringBootApplication
// 手动指定要扫描的包路径
@ComponentScan(basePackages = "student")
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

注意:如果后续接入JPA等组件,使用方案二时还需要额外添加@EntityScan、@EnableJpaRepositories等注解指定对应类的扫描路径,否则会出现实体、仓库类不生效的问题。

修复完路由问题后,记得给Student类补充一个无参构造方法,避免接口返回时JSON序列化失败:

// 补在Student类里即可
public Student() {
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:39:17