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

使用MockMvc测试POST接口返回415错误,Postman调用正常

解决MockMvc调用POST接口返回415不支持媒体类型的问题

我之前也碰到过完全一样的情况!Postman调用正常但MockMvc返回415,本质原因是你的MockMvc请求没有正确符合接口要求的application/json媒体类型规范,下面是具体的排查和解决步骤:

核心问题分析

你的接口通过consumes=MediaType.APPLICATION_JSON_VALUE明确要求请求体必须是JSON格式,而MockMvc默认不会自动帮你设置请求头和序列化请求体,这就导致接口识别不到正确的媒体类型,返回415错误。

解决方案步骤

1. 正确构建MockMvc请求:设置Content-Type并传入JSON请求体

你需要手动将List<Contact>序列化为JSON字符串,同时指定请求的Content-Type为application/json。示例代码如下:

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.MediaType;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

// 准备测试数据
List<Contact> testContacts = Arrays.asList(
    new Contact("Alice", "alice@example.com"),
    new Contact("Bob", "bob@example.com")
);

// 使用Jackson将对象序列化为JSON字符串
ObjectMapper objectMapper = new ObjectMapper();
String requestBodyJson = objectMapper.writeValueAsString(testContacts);

// 构建正确的MockMvc请求
mockMvc.perform(post("/users/test/{groupId}", "test-group-1")
        // 关键:设置请求的Content-Type为application/json
        .contentType(MediaType.APPLICATION_JSON)
        // 传入序列化后的JSON请求体
        .content(requestBodyJson)
        // 可选:指定接受的响应类型,和接口的produces对应
        .accept(MediaType.APPLICATION_JSON))
        .andExpect(status().isOk());

2. 检查MockMvc的配置是否正确

确保你的测试类已经正确配置了MockMvc,比如使用:

  • @WebMvcTest(YourController.class):专门测试Web层,会自动配置Jackson消息转换器
  • 或者@SpringBootTest + @AutoConfigureMockMvc:完整上下文测试,同样会加载必要的消息转换器

如果是自定义的WebMvc配置,一定要确认MappingJackson2HttpMessageConverter已经被注册到容器中,否则无法处理JSON的序列化/反序列化。

3. 排查Contact类的序列化兼容性

虽然Postman调用正常,但还是可以检查下Contact类是否满足Jackson的序列化要求:

  • 有无无参构造器(Jackson默认需要)
  • 字段是否有对应的getter/setter方法(或者用@JsonProperty注解标记字段)

常见错误避坑

  • 不要用.param()传递请求体:.param()是用来设置URL参数的,而@RequestBody读取的是请求体内容,必须用.content()传入JSON字符串
  • 不要遗漏.contentType(MediaType.APPLICATION_JSON):即使你传入了JSON字符串,不设置这个头,接口依然会认为请求媒体类型不符合要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:14:17