Spring Boot+Angular用PUT更新用户时遭遇415错误求助
解决PUT请求415 Unsupported Media Type错误
问题根源
- Angular HttpClient.put参数顺序错误:原代码将
userId作为请求体传入,而非用户对象user,导致请求体为纯数字,浏览器自动设置Content-Type: text/plain,后端@RequestBody无法解析为User对象。 - 缺少正确的请求头配置:未显式指定
Content-Type: application/json,且更新接口需JWT认证,未携带Authorization头(若后端配置了权限控制)。
修复步骤
1. 修正Angular UserService的updateUser方法
调整HttpClient.put的参数顺序,设置正确的请求头:
import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { UserAuthService } from './user-auth.service'; @Injectable({ providedIn: 'root', }) export class UserService { PATH_OF_API = 'http://localhost:9090'; constructor( private httpclient: HttpClient, private userAuthService: UserAuthService ) {} public sign(signData){ const requestHeader = new HttpHeaders({ 'No-Auth': 'True' }); return this.httpclient.post(`${this.PATH_OF_API}/registerNewUser`, signData, { headers: requestHeader }); } updateUser(userId: number, user: any) { // 获取JWT令牌(根据UserAuthService的实际方法调整) const authToken = this.userAuthService.getToken(); // 配置请求头:指定JSON格式,携带认证令牌 const requestHeaders = new HttpHeaders({ 'Content-Type': 'application/json', 'Authorization': `Bearer ${authToken}` }); // 正确调用put方法:URL → 请求体(user) → 配置项 return this.httpclient.put( `${this.PATH_OF_API}/UpdateUser/${userId}`, user, { headers: requestHeaders } ); } }
2. 关键说明
- 参数顺序修正:
HttpClient.put的第二个参数必须是请求体(即要更新的user对象),第三个参数是请求选项(含headers等),原代码颠倒了请求体和额外参数。 - Content-Type设置:显式指定
application/json,确保Angular发送JSON格式的请求体,后端能通过@RequestBody正确解析为User实例。 - JWT认证头:若后端更新接口需权限验证,必须携带
Authorization: Bearer {token}头,否则会触发401未授权错误(根据你的JWT Spring Security配置调整)。
3. 后端额外检查(可选)
确保User类具备正确的字段映射:
- 字段名与前端传入的JSON键一致,或使用
@JsonProperty注解指定映射关系。 - 类中包含无参构造器、getter/setter方法,便于Spring MVC解析。
内容的提问来源于stack exchange,提问作者Keerthi Senthil
相关产品推荐
相关产品推荐

