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

Spring Boot接口访问404问题排查与组件扫描配置求助

解决Spring Boot 3.1.1中REST接口404与组件扫描配置问题

问题定位

  • 404错误核心原因:当前BackendApplication的@ComponentScan仅指定了com.kaquya.backend.configs包,导致标注@RestController、@Service、@Repository的组件不在扫描范围内,Spring容器无法加载这些Bean,因此端点无法被识别。
  • 添加额外扫描包时出现PropertyConfig相关错误:大概率是手动创建PropertySourcesPlaceholderConfigurer的加载时机与组件扫描范围调整后的冲突导致。

解决方案

1. 修复组件扫描范围

@SpringBootApplication注解本身已包含@ComponentScan,默认会扫描主类所在包及其所有子包。因此最简洁的修复方式是移除自定义的@ComponentScan注解:

@SpringBootApplication
@EnableWebSecurity
public class BackendApplication {

    public static void main(String[] args) {
        SpringApplication.run(BackendApplication.class, args);
    }
}

如果必须手动指定扫描范围,需覆盖所有组件所在的根包:

@SpringBootApplication
@EnableWebSecurity
@ComponentScan(basePackages = {"com.kaquya.backend"}) // 根包覆盖所有子包
public class BackendApplication {

    public static void main(String[] args) {
        SpringApplication.run(BackendApplication.class, args);
    }
}

2. 优化PropertyConfig配置

Spring Boot推荐使用@PropertySource替代手动创建PropertySourcesPlaceholderConfigurer,更符合自动配置规范,避免加载时机冲突:

@Configuration
@PropertySource("classpath:queries/user_queries.xml")
public class PropertyConfig {
    // 无需再定义PropertySourcesPlaceholderConfigurer静态Bean
}

注:若user_queries.xml是标准properties格式的XML(如包含<properties>节点),@PropertySource可直接识别加载。

3. 验证修复效果

  • 启动应用后,查看日志确认UserController、UserService、UserRepositoryImpl等Bean已被初始化。
  • 访问/test端点,若返回this is a test endpoint,说明Controller已正常加载;测试/users的POST请求,验证业务逻辑是否正常。

4. 额外检查点

  • 确保UserController、UserService等组件所在包属于com.kaquya.backend的子包(如com.kaquya.backend.controller、com.kaquya.backend.service)。
  • 确认SecurityConfig中的anyRequest().permitAll()配置正确,避免权限拦截导致的404。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:14:58