Spring Boot 3.4中MockMvc设APPLICATION_JSON却发UTF-8请求报错415
测试代码
mvc.perform(post(URL_DUPLICATE_OBJECTIVE_5).contentType(MediaType.APPLICATION_JSON) .with(SecurityMockMvcRequestPostProcessors.csrf()).content(DUPLICATE_OBJECTIVE))
响应信息
Status = 415
Error message = Content-Type 'application/json;charset=UTF-8' is not supported.
Headers = [Accept:"application/json, application/yaml, application/*+json", X-Content-Type-Options:"nosniff", X-XSS-Protection:"0", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"DENY"]
Content type = null
Body =
Forwarded URL = null
Redirected URL = null
Cookies = []
排查方向及解决方案
检查目标接口的请求参数绑定
确认URL_DUPLICATE_OBJECTIVE_5对应的控制器方法是否正确声明了请求体接收逻辑:比如是否遗漏@RequestBody注解,或者接收参数的自定义类缺少无参构造函数、字段getter/setter(可通过Lombok的@NoArgsConstructor/@Data注解快速解决)。验证请求JSON格式合法性
检查DUPLICATE_OBJECTIVE变量的JSON内容是否存在语法错误,比如引号不匹配、逗号遗漏、结构嵌套错误等。格式非法的JSON会导致Spring无法解析,触发415错误。核对控制器的
consumes属性
查看目标接口的@PostMapping(或@RequestMapping)是否指定了consumes属性,如果属性值仅包含application/x-www-form-urlencoded等非JSON类型,需要调整为包含MediaType.APPLICATION_JSON_VALUE,或者直接移除consumes属性(Spring Boot默认支持JSON请求)。示例错误配置:@PostMapping(value = "/duplicate", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)排查Jackson依赖与配置
确认项目已引入spring-boot-starter-web依赖(该依赖默认包含Jackson JSON处理包);如果自定义了Jackson配置,检查是否存在禁用默认反序列化、修改媒体类型映射等错误配置,导致无法解析JSON请求。统一MockMvc初始化配置
对比当前测试类与其他正常测试类的MockMvc初始化逻辑,确认是否使用了不同的@AutoConfigureMockMvc参数、自定义WebMvcConfigurer等,保证配置一致性,避免因内容协商规则差异导致的媒体类型不支持问题。
内容的提问来源于stack exchange,提问作者user24194255

