You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot REST API接收Postman JSON返回HTTP 415错误的原因与疑问

Spring Boot REST API 415 Unsupported Media Type 问题排查

我正在学习Spring Boot中REST API的工作机制,在向控制器端点发送JSON数据时遇到问题:API返回HTTP 415 Unsupported Media Type错误,尽管JSON本身格式有效。

控制器代码

@RestController
@RequestMapping("/users")
public class UserController {

    @PostMapping
    public String createUser(@RequestBody User user) {
        return "User created";
    }
}

模型代码

public class User {

    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Postman请求信息

发送的JSON内容

{
    "name": "Jeferson",
    "age": 20
}

请求配置

  • 请求方法:POST
  • URL:http://localhost:8080/users
  • Body类型:raw
  • 选择格式:JSON

我已检查端点URL、HTTP请求方法、JSON格式、模型字段及getter/setter方法,也查阅了HTTP 415相关文档,但仍未理解Spring Boot拒绝请求的原因。后来发现请求失败时,Postman实际发送的请求头为Content-Type: text/plain,而非预期的Content-Type: application/json。

我的疑问

  1. 为何JSON有效,Spring Boot仍拒绝请求?
  2. @RequestBody正常工作是否必须依赖Content-Type请求头?
  3. Spring Boot如何判断请求支持的媒体类型?

问题解答

1. 为何JSON有效,Spring Boot仍拒绝请求?

Spring Boot处理请求体时,核心依据是请求头的Content-Type,而非仅看请求体的格式。你这里虽然JSON结构正确,但请求头标记的是text/plain,服务器会把请求体当成普通纯文本处理,无法触发JSON到Java对象的反序列化逻辑,因此返回415不支持的媒体类型错误。

2. @RequestBody正常工作是否必须依赖Content-Type请求头?

是的。@RequestBody的作用是让Spring把请求体转换为指定Java对象,这个转换由**消息转换器(MessageConverter)**完成。而消息转换器是通过Content-Type来匹配的——比如处理JSON的MappingJackson2HttpMessageConverter只识别application/json类型的请求。如果请求头没有正确的Content-Type,Spring找不到对应的转换器,就无法完成对象转换,直接抛出415错误。

3. Spring Boot如何判断请求支持的媒体类型?

Spring Boot主要通过两个层面判断:

  • 请求头的Content-Type:这是最直接的标识,告诉服务器请求体的数据格式,比如application/json、application/x-www-form-urlencoded等。
  • 控制器方法的限定配置:比如在@PostMapping中添加consumes = "application/json",就直接限定该端点只接受JSON类型的请求;@RequestBody注解也会触发Spring检查请求的Content-Type是否有匹配的消息转换器。

另外,Spring Boot默认已经内置了常用的消息转换器,比如处理JSON的Jackson转换器、处理表单数据的表单转换器等。当请求的Content-Type不在这些转换器的支持范围内,或者没有找到匹配的转换器时,就会返回415错误。


内容的提问来源于stack exchange,提问作者J_oslee19

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 06:42:29