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

Spring Boot MockMvc测试POST接口报Content type not set异常

Spring Boot POST接口单测报「Content type not set + Required request body is missing 400错误」排查修复

首先明确:Content type not set是连带报错,不是根因。Spring没读取到预期的JSON请求体时会直接返回400 BAD_REQUEST,这个默认错误响应不会主动设置Content-Type响应头,才会触发对应断言失败。所有排查都围绕「为什么后端没拿到请求体」展开,不用死磕Content-Type头的设置。

1. 测试类请求写法问题(占这类问题的90%)

  • 禁止直接把Java DTO对象传入content()方法,必须先序列化为JSON字符串:
    错误写法:
    // 错误:content()方法仅接收字符串参数,直接传对象会调用toString()生成非JSON格式内容
    mockMvc.perform(post("/api/xxx")
        .contentType(MediaType.APPLICATION_JSON)
        .content(reqDto)
    )
    
    正确写法:
    // 手动用ObjectMapper序列化DTO为JSON字符串
    ObjectMapper om = new ObjectMapper();
    String reqJson = om.writeValueAsString(reqDto);
    
    mockMvc.perform(post("/api/xxx")
        .contentType(MediaType.APPLICATION_JSON)
        .content(reqJson)
        .andDo(print()) // 加这行可以打印完整请求/响应报文,直接看实际发出的请求体内容
    )
    
  • 不要把请求体内容错放到param()、queryParam()、flashAttr()方法里,这些方法传递的是URL参数/Flash属性,不会写入POST请求体。
  • 检查序列化后的JSON字符串是否为空:如果DTO没有对应字段的getter方法、Jackson序列化配置错误,会导致序列化结果为null/空串,等价于没传请求体。
  • 检查是否同时调用了formData()方法传表单参数,该方法会覆盖content()设置的JSON请求体。

2. Controller层方法签名配置错误

  • 检查接收请求参数的位置是否加了@RequestBody注解:
    错误写法:
    // 错误:缺少@RequestBody注解时,Spring默认从URL参数中解析值,不会读取POST请求体
    @PostMapping("/api/xxx")
    public RspDto create(ReqDto req) {
        // 业务逻辑
    }
    
    正确写法:
    @PostMapping("/api/xxx")
    public RspDto create(@RequestBody ReqDto req) {
        // 业务逻辑
    }
    
  • 检查接口的consumes配置是否匹配:如果@PostMapping的consumes属性设置为application/x-www-form-urlencoded等非JSON类型,Spring会直接拒绝JSON请求,不会进入请求体解析流程。
  • 检查请求路径是否完全匹配:路径末尾多写斜杠、少写路径段导致请求被3xx重定向时,POST请求的请求体会在重定向过程中丢失。

3. Spring测试上下文配置问题

  • 如果使用@WebMvcTest做切片测试,确认MappingJackson2HttpMessageConverter被正常加载:如果自定义了消息转换器配置却没把Jackson的JSON转换器加入列表,Spring无法解析JSON格式的请求体。
  • 检查是否配置了自定义过滤器/拦截器:如果自定义鉴权、日志类过滤器提前读取了Servlet请求体(Servlet请求体默认只能读取一次),却没有用可缓存请求体的包装类回写,后续Controller处理时就会拿不到请求体内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:01:41