如何解决Angular 9对接Spring Boot应用时出现的415错误?
415错误原因及修复方案
415 Unsupported Media Type 错误本质是后端无法识别请求的内容类型,没有走到字段映射解析的步骤,所以你之前加@JsonIgnore的排查方向是错误的,可按以下步骤排查修复:
1. 检查请求头是否正确传递
打开浏览器F12网络面板,找到对应POST请求的请求头,确认Content-Type字段值为application/json,没有被拦截器、代理等修改为text/plain或者其他值。
2. 修正Angular端请求写法
Angular的HttpClient默认会自动对JS对象做JSON序列化,同时自动添加application/json的请求头,不需要手动调用JSON.stringify(),冗余的序列化反而可能导致请求头异常,修改为如下写法即可:
return this.http.post(`${AppComponent.API}/Trip/Add`, trip);
如果确实需要手动指定请求头,确认HttpHeaders是从@angular/common/http包导入,没有写错导入路径。
3. 修复后端配置问题
- 确认项目引入了
spring-boot-starter-web依赖,该依赖默认集成了Jackson JSON解析工具,没有该依赖会导致后端无法解析JSON格式的请求体:
Mavenpom.xml参考配置:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
- 检查有没有自定义的
WebMvcConfigurer实现类,是否重写了configureMessageConverters方法覆盖了默认的Jackson消息转换器,如果有需要保留JSON转换器的注册。 - 可以在
@PostMapping注解中显式指定接收的内容类型,避免匹配错误:
import org.springframework.http.MediaType; @PostMapping(value = "/Trip/Add", consumes = MediaType.APPLICATION_JSON_VALUE) public Integer addFund(@RequestBody Trip trip) { return tripService.addTrip(trip); }
- 检查
Trip实体类是否提供了公共无参构造函数、字段对应的get/set方法,如果使用Lombok需要确保@Data/@NoArgsConstructor注解生效。
4. 核对请求路径匹配
浏览器实际请求路径为http://localhost:9019/trips/trip/Add,和Controller声明的/Trip/Add存在大小写差异、以及多了/trips前缀的问题,确认AppComponent.API的配置值拼接后路径和后端路径完全匹配,路径匹配异常也可能被全局错误处理器返回415状态码。
内容的提问来源于stack exchange,提问作者user2304483
相关产品推荐
相关产品推荐

