Spring应用调用/retrieve接口报No static resource retrieve错误求助
Spring Boot 访问/retrieve接口出现404(No static resource retrieve)问题排查方案
错误原因分析
错误日志提示
No static resource retrieve且返回404,说明Spring将/retrieve请求识别为静态资源请求,未匹配到对应的Controller接口。结合此前使用repository包功能正常的情况,问题大概率出在包扫描范围、Controller注解配置或路由冲突上。
排查与修复步骤
1. 检查Controller注解与路由配置
- 确认对应Controller类标注了
@RestController或@Controller注解,方法上的@GetMapping/@PostMapping等注解路径是否准确,比如是否正确写为@GetMapping("/retrieve"),避免拼写错误。 - 示例正确的Controller代码:
@RestController public class RetrieveController { @GetMapping("/retrieve") public String handleRetrieveRequest() { // 业务逻辑 return "Data retrieved"; } }
2. 核对Spring Boot主类的包扫描范围
@SpringBootApplication注解默认扫描主类所在包及其子包。如果Controller所在包不在这个范围内,需手动指定扫描路径:
@SpringBootApplication(scanBasePackages = {"com.yourproject.controller", "com.yourproject.repository"}) public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
3. 检查包结构是否符合扫描规则
对比此前功能正常时的包结构,确认Controller所在包是否被Spring正确覆盖扫描。比如主类在com.yourproject,Controller要放在com.yourproject.controller或其子包下,否则无法被扫描到。
4. 排查静态资源冲突
如果src/main/resources/static目录下存在名为retrieve的文件或文件夹,Spring会优先匹配静态资源,导致接口请求被拦截:
- 直接删除该静态资源;
- 或通过配置修改静态资源访问前缀,避免路由冲突:
# application.properties spring.mvc.static-path-pattern=/static/**
5. 确认请求方式匹配
如果接口使用@PostMapping("/retrieve"),但你用GET方式访问,也会返回404。使用Postman、curl等工具确认请求方式与接口注解一致。
内容的提问来源于stack exchange,提问作者Hywel Griffiths
相关产品推荐
相关产品推荐

