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

JUnit测试POST请求时遭遇InvalidMediaTypeException问题排查

解决Spring JUnit POST测试中的org.springframework.http.InvalidMediaTypeException问题

从你的描述来看,这个异常主要源于两个核心问题,咱们一步步拆解分析:

1. JSON请求体的字段类型不匹配

你预期的JSON里,nAccountId、nAccountCPCMappingid、nDeptId、nInvestigatorId这些字段都是数值类型,但你手动拼接字符串时给它们加了双引号,把数值转成了字符串类型:

// 错误示例:数字字段被错误包裹为字符串
String json = "{\n" + " \"nAccountId\":\"651754\", ...";

这种格式不符合接口预期的JSON结构,Spring无法正确解析请求体,进而触发媒体类型相关的异常。

2. (潜在问题)请求头未正确声明Content-Type

如果你的测试代码没有显式设置请求的Content-Type为application/json,Spring也会无法识别请求体的媒体类型,同样会抛出这个异常。


修复方案

方案一:手动修正JSON字符串(不推荐,易出错)

把数字字段的双引号去掉,确保JSON结构和预期完全一致:

String json = "{\n" +
        " \"nAccountId\":651754,\n" +
        " \"sLocation\": \"B\",\n" +
        " \"nAccountCPCMappingid\":8,\n" +
        " \"sAcctDesc\":\" FY07 GEN GIFTS\",\n" +
        " \"nDeptId\":21728,\n" +
        " \"sClientAcctId\":\"2100012\",\n" +
        " \"nInvestigatorId\":65760\n" +
        "}";

方案二:用Jackson的ObjectMapper构造JSON(推荐,更可靠)

手动拼接JSON很容易因疏漏出错,建议用Jackson序列化Java对象来生成正确的JSON:

  1. 先创建与预期JSON结构对应的实体类:
public class AccountRequest {
    private Long nAccountId;
    private String sLocation;
    private Long nAccountCPCMappingid;
    private String sAcctDesc;
    private Long nDeptId;
    private String sClientAcctId;
    private Long nInvestigatorId;

    // 生成getter、setter,或者使用Lombok的@Data注解简化代码
}
  1. 在测试代码中构造对象并序列化:
AccountRequest request = new AccountRequest();
request.setNAccountId(651754L);
request.setSLocation("B");
request.setNAccountCPCMappingid(8L);
request.setSAcctDesc(" FY07 GEN GIFTS");
request.setNDeptId(21728L);
request.setSClientAcctId("2100012");
request.setNInvestigatorId(65760L);

ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(request);

方案三:确保测试请求设置正确的Content-Type

发送POST请求时,必须显式指定请求头的Content-Type为application/json,比如使用Spring MockMvc测试的写法:

mockMvc.perform(post("/your-target-api-endpoint")
                .contentType(MediaType.APPLICATION_JSON)
                .content(json))
        .andExpect(status().isOk());

按照上面的方式调整后,就能解决InvalidMediaTypeException的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:42:28