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

Jetty/SpringMVC报Unsupported Media Type for application/json问题求助

排查Jetty+SpringMVC POST请求错误的关键步骤

嘿,我完全理解你现在的困惑——SpringBoot把所有配置都封装得严严实实,手动搭Jetty+SpringMVC的时候,那些被隐藏的细节很容易变成踩坑点。不过要精准找出问题,还需要你补充几个关键信息:

  • 控制器类的完整代码:尤其是处理POST请求的方法,比如@RequestMapping的参数配置、有没有用@RequestBody绑定请求体
  • MessageRequest类的代码:包括字段定义、构造函数、getter/setter,有没有用Lombok的@Data这类简化注解
  • POST请求的具体细节:请求头里的Content-Type是什么?请求体的格式是JSON还是表单?
  • 错误响应详情:HTTP状态码(比如400 Bad Request、415 Unsupported Media Type)、响应体的错误信息,或者控制台输出的异常堆栈

在你补充信息之前,先给你几个常见的自查方向:

  1. 请求头Content-Type是否匹配
    如果你的请求体是JSON格式,必须在请求头中设置Content-Type: application/json。如果没设置,SpringMVC会默认按表单格式解析,自然无法匹配MessageRequest对象,导致415或400错误。

  2. MessageRequest类的序列化支持
    SpringMVC默认用Jackson处理JSON序列化,所以你的MessageRequest类需要满足:

    • 有无参构造函数(Jackson默认要求)
    • 所有字段都有对应的getter和setter方法(或者用Lombok的@Data注解自动生成)
    • 字段没有被@JsonIgnore之类的注解意外排除
  3. SpringMVC配置类是否正确
    确保你的配置类加了@EnableWebMvc注解,并且注册了JSON消息转换器:

    @Configuration
    @EnableWebMvc
    public class WebConfig implements WebMvcConfigurer {
        @Override
        public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
            converters.add(new MappingJackson2HttpMessageConverter());
        }
    }
    
  4. Jetty容器的Servlet映射是否正确
    要确保Spring的DispatcherServlet被正确注册到Jetty,并且映射到了你的请求路径(比如"/api/*"或者"/"):

    public class JettyServer {
        public static void main(String[] args) throws Exception {
            Server server = new Server(8080);
            ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
            context.setContextPath("/");
            server.setHandler(context);
    
            // 初始化Spring上下文
            AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext();
            appContext.register(WebConfig.class, YourController.class);
    
            // 注册DispatcherServlet
            ServletHolder servletHolder = new ServletHolder(new DispatcherServlet(appContext));
            context.addServlet(servletHolder, "/*");
    
            server.start();
            server.join();
        }
    }
    

等你补充了具体的代码和错误信息,我就能帮你更精准地定位问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:07:02