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)、响应体的错误信息,或者控制台输出的异常堆栈
在你补充信息之前,先给你几个常见的自查方向:
请求头Content-Type是否匹配
如果你的请求体是JSON格式,必须在请求头中设置Content-Type: application/json。如果没设置,SpringMVC会默认按表单格式解析,自然无法匹配MessageRequest对象,导致415或400错误。MessageRequest类的序列化支持
SpringMVC默认用Jackson处理JSON序列化,所以你的MessageRequest类需要满足:- 有无参构造函数(Jackson默认要求)
- 所有字段都有对应的getter和setter方法(或者用Lombok的
@Data注解自动生成) - 字段没有被
@JsonIgnore之类的注解意外排除
SpringMVC配置类是否正确
确保你的配置类加了@EnableWebMvc注解,并且注册了JSON消息转换器:@Configuration @EnableWebMvc public class WebConfig implements WebMvcConfigurer { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(new MappingJackson2HttpMessageConverter()); } }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
相关产品推荐
相关产品推荐

