4.通过axios给后端传输数据时报415

1.为啥会出现415错误

错误定义
状态码: 415 Unsupported Media Type
含义:“格式不拒”。前端发送的数据格式(通常是 JSON),后端服务器无法理解、无法处理或配置不支持,因此直接拒收。
一句话核心原因:后端没有配置好能把前端发来的 JSON 数据“翻译”成 Java 对象的转换器(Jackson)。

2.排查三部曲(按顺序检查)

  • ✅ 第一步:查前端(确保数据是 JSON)

    1. 检查 Payload:数据必须是标准的 JSON 格式(如 { "name": "ylf", "age": 19 }),不能是 name=ylf&age=19。
      image

      如果出现这种,说明前端发给后端的不是Json格式
      使用axios.post向后端发送json格式数据时候,直接使用对象形式,不用使用JSON.stringify(userInfo)将其转为json字符串在发送。否则便会出现以下错误,aixos.post底层会自动完成对象转化为json字符串。
      image

    2. 检查 Header:请求头必须包含 Content-Type: application/json。
      image

    注意:如果用 jQuery,需显式设置 contentType 并使用 JSON.stringify()

  • ✅ 第二步:查依赖(确保有翻译工具)
    检查 pom.xml,必须引入 Jackson 依赖(Spring MVC 默认不含 JSON 处理库)。

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.15.2</version> 
    </dependency>
    
  • ✅ 第三步:查后端配置(最容易漏!)
    即便有了依赖,Spring 默认也不会开启 JSON 转换,必须手动开启。
    A. 配置文件 (spring-mvc.xml): 必须添加注解驱动,这会自动注册 Jackson 转换器。

    <mvc:annotation-driven />
    
    • 重点<mvc:annotation-driven />随便放在哪个xml文件都可以吗?

      绝对不行!❌ 不能随便放。

      1. 为什么不能随便放?(父子容器原理)
        Spring 的应用通常会有两个“圈子”(容器):
        父容器(Root Context):通常由 applicationContext.xml 加载。负责 Service(业务逻辑)、Dao(数据库操作)。它像是“后勤仓库”。
        子容器(Web Context):由 Spring MVC 的 DispatcherServlet 加载(比如叫 spring-mvc.xml)。负责 Controller(接收请求)、视图解析。它像是“前台接待”。
        关键点<mvc:annotation-driven /> 这个开关,是专门用来教 Controller(前台) 如何说话(处理 JSON)的。 如果你把它配在 父容器(后勤仓库) 里,前台根本不知道这回事,依然不会处理 JSON,所以还是会报 415

    B. 代码注解 (Controller): 接收参数时必须告诉 Spring 去读取 Body 中的 JSON。

    // ★★★ 必须加 @RequestBody
    @RequestMapping("/add")
    public String add(@RequestBody User user) {
        return "success";
    }
    
posted @ 2025-12-15 18:30  那就改变世界吧  阅读(0)  评论(0)    收藏  举报