415错误本质是客户端Content-Type与服务端期望不匹配,需检查@RequestBody声明、请求头一致性、JSON语法,并可通过@ControllerAdvice全局捕获HttpMediaTypeNotSupportedException异常。

Java 中遇到 415 Unsupported Media Type 错误,本质是客户端发送的请求体格式(如 Content-Type)与服务端期望的不匹配。Spring Boot(最常用场景)会自动返回 415 响应,但关键在于**如何定位原因、主动拦截或自定义处理逻辑**,而不是被动接受默认行为。
检查 @RequestBody 接收类型与 Content-Type 是否一致
这是最常见的原因。例如:
- 接口方法声明接收
@RequestBody User user,但前端发的是application/x-www-form-urlencoded或纯文本,而非application/json - 控制器方法没加
@RequestBody,却试图绑定 JSON 数据(此时 Spring 默认按表单解析) - JSON 格式有语法错误(如多逗号、引号不闭合),导致反序列化失败前就触发媒体类型校验
✅ 建议:确保前端设置正确的 Content-Type: application/json;后端用 @RequestBody 明确标注,并确认 DTO 字段类型与 JSON 字段兼容(如日期字段配 @JsonFormat)。
全局捕获并统一响应 415 异常
Spring 提供 HttpMediaTypeNotSupportedException,专门对应 415 场景。可通过 @ControllerAdvice 拦截:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(HttpMediaTypeNotSupportedException.class)
public ResponseEntity<apiresponse> handleMediaTypeNotSupported(
HttpMediaTypeNotSupportedException ex) {
String message = "不支持的媒体类型: " + ex.getContentType();
return ResponseEntity.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE)
.body(ApiResponse.error(415, message));
}
}</apiresponse>
⚠️ 注意:该异常在请求体解析前抛出,所以不会进入控制器方法。若需记录原始请求头或做审计,可结合 OncePerRequestFilter 提前读取 Content-Type 并预判。
放宽媒体类型限制(谨慎使用)
某些场景需支持多种格式(如同时接受 application/json 和 application/xml),可在方法上显式指定:
@PostMapping(value = "/user",
consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE})
public ResponseEntity<user> createUser(@RequestBody User user) { ... }</user>
或者在类级别统一配置(影响所有方法):
@RestController @RequestMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
❌ 不推荐直接设为 "*/*" —— 会绕过媒体类型校验,失去语义保护,且可能引发后续解析异常。
调试技巧:快速定位问题源头
当 415 出现时,优先确认三点:
- 查看浏览器/Postman 的请求头,确认
Content-Type值是否拼写正确(如application/json不是application/jason) - 检查 Controller 方法是否有
@RequestBody注解;若参数是Map或String,Spring 可能不走标准 JSON 解析流程 - 开启 Spring 日志:
logging.level.org.springframework.web.servlet.mvc.method.annotation=DEBUG,日志中会明确打印 “Content type 'xxx' not supported”
不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











