Postman请求Spring Boot接口返回404错误排查求助
针对你遇到的所有接口都返回404的问题,我们可以从以下几个常见方向逐步排查:
1. 确认Spring是否扫描到了你的ProductController
Spring Boot默认只会扫描主启动类(带有@SpringBootApplication注解的类)所在包及其子包下的组件。如果你的ProductController所在的包不在主启动类的包层级下,Spring就无法发现这个Controller,自然不会生成对应的接口映射。
验证方法:
- 查看Spring Boot启动日志,搜索是否有类似这样的日志条目:
如果没有这类日志,说明Controller未被扫描到。解决方法是在主启动类上添加Mapped "{[/product/addProduct],methods=[POST]}" onto public com.yourpackage.Product com.yourpackage.ProductController.addProduct(com.yourpackage.Product)@ComponentScan注解,指定Controller所在的包,比如:@SpringBootApplication @ComponentScan("com.yourpackage.controller") // 替换成你的Controller实际包路径 public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
2. 检查请求的完整路径是否正确
你的Controller上有@RequestMapping("/product")前缀,所以所有接口的完整路径都需要包含这个前缀,不能直接使用方法上的路径。
举几个正确的请求示例:
- 添加单个商品:
POST http://localhost:8080/product/addProduct(注意替换端口为你实际的应用端口) - 查询所有商品:
GET http://localhost:8080/product/products - 根据ID查询商品:
GET http://localhost:8080/product/getProductById/1(这里的1是实际的商品ID,要放在路径里,不是作为请求参数)
很多人会漏掉/product前缀,直接请求/addProduct,这必然会返回404。
3. 确认请求方法与接口映射的方法一致
Spring MVC会同时匹配请求路径和HTTP方法,如果请求方法不对,也会返回404(因为找不到对应路径+方法的映射)。比如:
updateProduct是@PutMapping("/update"),必须用PUT方法请求,不能用POST或GETdeleteProduct是@DeleteMapping("/delete/{id}"),必须用DELETE方法请求addProduct是@PostMapping,必须用POST方法
验证方法:在Postman中确认请求方法选择正确,比如调用更新接口时要选PUT,而不是默认的GET。
4. 检查是否有拦截器/过滤器拦截了请求
如果你的项目中配置了自定义的拦截器或过滤器,可能会拦截掉请求,导致请求无法到达Controller。
验证方法:暂时禁用自定义的拦截器/过滤器,重新测试接口,如果能正常访问,说明是拦截器的配置问题,需要调整拦截规则,允许/product/**路径的请求通过。
额外注意:你的Controller中的一个小细节
虽然这不会导致404,但你的addProducts方法和addProduct方法名重复了(只是参数不同),虽然Java允许方法重载,但为了代码可读性,建议把addProducts的方法名改成addProductsList或者更清晰的名字,避免后续维护混淆。
内容的提问来源于stack exchange,提问作者idris DAĞ

