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

Spring MVC报错Content type 'application/json' not supported问题咨询

问题根因

抛出org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json' not supported的核心原因有两个,和依赖、Spring MVC配置直接相关:

  • 未开启Spring MVC注解驱动。现有配置仅使用<ctx:annotation-config>开启了普通Spring Bean的注解注入支持,没有注册MVC层核心的请求映射适配器、消息转换器,即使引入了Jackson依赖,Spring也无法识别@RequestBody注解,无法完成JSON请求体到Java对象的反序列化。
  • 配置存在多处瑕疵:Spring配置文件中MVC命名空间的XSD地址填写错误,会导致MVC相关标签无法正常解析;Web项目打包类型错设为jar;缺少Servlet API依赖,可能引发运行时兼容问题。
修复方案

1. 修正Spring Servlet配置文件(frontcontroller-servlet.xml)

修正错误的XSD地址,添加MVC注解驱动配置,删除冗余的命名空间声明,修正后配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:ctx="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 开启MVC注解驱动,自动注册JSON/XML等消息转换器,识别@RequestBody/@ResponseBody等MVC注解 -->
    <mvc:annotation-driven/>
    
    <ctx:component-scan base-package="laustrup.controllers"/>
    <ctx:component-scan base-package="laustrup.models"/>
    <ctx:component-scan base-package="laustrup.services"/>
</beans>

说明:<mvc:annotation-driven/>是原生Spring MVC处理JSON请求的核心配置,添加后Spring会自动扫描classpath下的Jackson依赖包,自动注册MappingJackson2HttpMessageConverter,负责完成JSON请求体到Java对象的反序列化、Java返回值到JSON响应的序列化。

2. 调整pom.xml配置

修正打包类型,补全必要依赖,不需要XML格式请求处理可移除多余的Jackson XML依赖避免Content-Type匹配干扰,修正后核心配置如下:

<!-- Web项目打包类型从jar改为war,适配Servlet容器部署要求 -->
<packaging>war</packaging>
<!-- 省略groupId、artifactId、版本等基础项目配置 -->
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.9.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.2.9.RELEASE</version>
    </dependency>
    <!-- 补全Servlet API依赖,scope设为provided由容器提供,避免jar包冲突 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <!-- Jackson JSON处理核心依赖,jackson-databind会自动传递引入jackson-core、jackson-annotations,无需单独引入 -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.13.3</version>
    </dependency>
    <!-- 无XML格式请求处理需求可删除该依赖,避免干扰Content-Type匹配逻辑 -->
    <!--
    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
        <version>2.13.3</version>
    </dependency>
    -->
</dependencies>

3. 可选优化:升级web.xml规范版本

现有web.xml使用的是2.3版本的老旧DTD规范,建议升级到Servlet 4.0规范避免高版本容器兼容问题,参考配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
  <display-name>Mailbox Web Application</display-name>
  
  <servlet>
    <servlet-name>frontcontroller</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>frontcontroller</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>
验证方式

配置修改完成后,执行Maven clean、Maven install命令重新构建项目,部署到Tomcat等Servlet容器后,Postman发请求时确认三点即可正常调用:

  • 请求方法为PUT
  • 请求头Content-Type值为application/json
  • 请求体为合法JSON格式,字段名和Mail类的属性名一一对应

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:24:28