URL正确仍出现HTTP POST 404错误,请求排查接口问题
核心问题分析
出现POST http://localhost:8080/api/car/create-car 404 (Not Found)错误,说明请求URL在Spring Boot服务中无对应处理端点,结合代码可定位以下几个关键问题点:
1. Java类名大小写错误
Spring Boot控制器的addCars方法参数中,final car car的类名是小写的car,但Java是大小写敏感语言,实体类应为大写开头的Car,这会导致Spring无法识别参数类型,进而无法正确映射请求端点,最终返回404。
修改控制器代码:
@PostMapping(value = "/create-car") @ResponseBody @CrossOrigin(origins = "http://localhost:4200") public void addCars(@RequestBody final Car car) { // 将小写car改为大写Car this.carRepository.save(car); }
2. 控制器未被Spring扫描
确保CarController所在包在Spring Boot启动类的同级或子包下(比如启动类在com.example.demo,控制器需在com.example.demo或com.example.demo.controller这类子包中)。若不在此范围,需在启动类添加@ComponentScan指定扫描路径:
@SpringBootApplication @ComponentScan(basePackages = "你的控制器所在包路径") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
3. Angular请求头设置冗余
你在Angular的httpOptions里设置了ACCESS_CONTROL_ALLOW_ORIGIN和ACCESS_CONTROL_ALLOW_CREDENTIALS,这两个是服务器返回给客户端的响应头,客户端发起请求时无需设置,反而可能干扰请求逻辑。建议移除这些冗余头,Angular的HttpClient会配合Spring Boot的@CrossOrigin注解自动处理跨域:
readonly httpOptions = { headers: new HttpHeaders({ "Content-Type": "application/json" // 仅保留必要的请求头,HttpClient默认也会自动添加 }) };
4. 确认Spring Boot服务端口
检查application.properties或application.yml,确保服务运行在8080端口:
server.port=8080
5. 优化URL拼接(可选)
Angular中的URL拼接可改用模板字符串,提升可读性:
return this.http.post(`${this.usersUrl}/api/car/create-car`, car, this.httpOptions);
验证步骤
- 重启Spring Boot服务,确保代码修改生效
- 用Postman直接调用
POST http://localhost:8080/api/car/create-car,发送符合Car实体结构的JSON数据,验证端点是否正常响应 - 再测试Angular端的请求
内容的提问来源于stack exchange,提问作者Zerox

