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

Spring Boot REST API未指定Content-Type:application/json时POST/PUT报错如何解决

问题解答

是否必须指定Content-Type: application/json请求头?

严格来说不是强制要求,但这是REST API的最佳实践,也是Spring Boot默认行为逻辑导致的:

  • 当你用@RequestBody注解接收JSON格式请求体时,Spring MVC需要通过Content-Type请求头选择对应的HttpMessageConverter(比如MappingJackson2HttpMessageConverter)来解析请求体。
  • 如果没指定Content-Type,Spring无法确定请求体格式,就会返回415 Unsupported Media Type错误。

如何在不指定该请求头时让接口正常工作?

可以通过配置Spring MVC,让它在请求无Content-Type时默认按JSON格式解析请求体,常用两种方式:

方式1:自定义消息转换器的默认媒体类型

创建Web配置类,修改MappingJackson2HttpMessageConverter的默认媒体类型,让它在无Content-Type时生效:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
        // 设置默认媒体类型为application/json
        jsonConverter.setDefaultContentType(MediaType.APPLICATION_JSON);
        // 将转换器放到列表最前面,确保优先被使用
        converters.add(0, jsonConverter);
    }
}

方式2:通过@RequestMapping的consumes属性兼容多种情况

如果接口需要同时支持带和不带Content-Type的请求,可在注解中指定允许的媒体类型,包括*/*(匹配任意类型):

@PostMapping(value = "/your-api", consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.ALL_VALUE})
public ResponseEntity<?> yourApi(@RequestBody YourDto dto) {
    // 接口业务逻辑
    return ResponseEntity.ok(dto);
}

这种配置下,只要请求体是合法JSON格式,即使没有Content-Type,Spring也会尝试用合适的转换器解析。

注意事项

虽然上述配置能解决问题,但仍建议要求客户端指定Content-Type: application/json——这符合HTTP协议规范,能避免请求体格式歧义导致的潜在问题,也让接口行为更清晰可控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:01:06