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

Spring MVC中MockMvc测试Controller遇参数传递与媒体类型不支持报错

解决MockMvc测试Spring MVC接口时的415 MediaType不支持问题

你遇到的415错误核心是请求体传递逻辑错误,再加上可能的Spring MVC JSON解析配置缺失,咱们一步步来修复:

1. 修正测试代码的请求体传递方式

你的接口用@RequestBody Map map接收请求体中的JSON,但测试代码里错误地用.param("map", requestJson)把JSON当成了URL参数传递,这完全不符合@RequestBody的接收规则。你需要把JSON内容放在请求体里,而不是作为请求参数:

修改testQueryscanResultList方法:

@Test
public void testQueryscanResultList() throws Exception {
    Map<String, String> testMap = new HashMap<>();
    testMap.put("key1", "value1");
    testMap.put("key2", "value2");
    String requestJson = JSONObject.toJSONString(testMap);
    mockMvc.perform(
            post("/API/scanresultconfigure/queryScanResultList/001/abc")
                    .contentType(MediaType.APPLICATION_JSON)
                    .content(requestJson) // 用content传递请求体,替代param
                    .accept(MediaType.APPLICATION_JSON) // 显式指定接受响应类型更规范
    )
            .andExpect(status().isOk())
            .andDo(print());
}

2. 确保Spring MVC具备JSON解析能力

Spring MVC默认依赖Jackson来处理JSON的序列化和反序列化,如果项目中缺失相关依赖,会导致无法解析application/json类型的请求体。

如果是Maven项目,确保pom.xml中包含以下依赖:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>你的版本号,比如2.15.2</version>
    <scope>test</scope> <!-- 仅测试环境需要则保留,否则去掉 -->
</dependency>

3. 修正测试类的Spring配置

你的测试类@ContextConfiguration只加载了ScanResultConfigureController,缺少Spring MVC的核心配置(比如@EnableWebMvc),这会导致MockMvc无法正确初始化JSON解析器。

你可以修改测试类的配置,引入项目中已有的Spring MVC配置类:

@WebAppConfiguration
@ContextConfiguration(classes = {WebConfig.class, ScanResultConfigureController.class}) // 替换WebConfig为你项目的MVC配置类
@ComponentScan(basePackages = "app.dnatask.controller")
public class ScanResultConfigureControllerTest extends AbstractTestNGSpringContextTests {
    // ... 其他代码不变
}

如果没有专门的Web配置类,也可以在测试类中添加内部配置类:

@WebAppConfiguration
@ContextConfiguration(classes = {ScanResultConfigureControllerTest.WebConfig.class, ScanResultConfigureController.class})
public class ScanResultConfigureControllerTest extends AbstractTestNGSpringContextTests {

    @Configuration
    @EnableWebMvc
    @ComponentScan(basePackages = "app.dnatask.controller")
    public static class WebConfig {
        // 可按需添加自定义Bean,比如Jackson的ObjectMapper
    }

    // ... 其他代码不变
}

验证修复

完成以上修改后重新运行测试,应该就能正确解析JSON请求体,返回200状态码了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:16:33