控制器Post映射用@RequestBody MultiValueMap报415错误,求解决
解决415 Unsupported Media Type错误的方案
问题原因
当你在控制器方法中使用@RequestBody MultiValueMap<String, String>接收参数时,Spring默认要求请求的Content-Type为application/x-www-form-urlencoded(表单编码格式)。但你通过PostMan发送的是JSON格式的请求体,对应的Content-Type是application/json,Spring无法将JSON格式的请求体解析为MultiValueMap类型,因此抛出415错误。
解决方案
方案一:调整PostMan请求格式适配MultiValueMap
- 在PostMan中,将请求体类型从
raw(JSON)切换为x-www-form-urlencoded或form-data - 添加键值对
name=john,PostMan会自动设置对应的Content-Type请求头,Spring就能正常解析为MultiValueMap
方案二:修改控制器参数适配JSON请求
如果你需要保持JSON格式的请求体,建议将参数类型改为Map<String, String>或自定义实体类:
使用Map<String, String>示例
@PostMapping("/your-api-path") public ResponseEntity<?> handleRequest(@RequestBody Map<String, String> requestBody) { String name = requestBody.get("name"); // 业务逻辑处理 return ResponseEntity.ok("Received name: " + name); }
使用自定义实体类示例
// 定义请求实体类 public class UserRequest { private String name; // getter和setter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } } // 控制器方法 @PostMapping("/your-api-path") public ResponseEntity<?> handleRequest(@RequestBody UserRequest requestBody) { String name = requestBody.getName(); // 业务逻辑处理 return ResponseEntity.ok("Received name: " + name); }
额外说明
MultiValueMap主要用于处理表单请求中存在多个相同键的场景(比如name=john&name=doe),JSON格式的请求更适合用普通Map或实体类来接收,不建议强行配置转换器让MultiValueMap支持JSON,会增加不必要的复杂度。
内容的提问来源于stack exchange,提问作者Anamika
相关产品推荐
相关产品推荐

