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

Spring Boot无参数请求报415 Unsupported Media Type问题

问题场景与需求

现有如下Spring Boot的RestController:

@AllArgsConstructor
@RestController
@RequestMapping(value = "/foo", produces = APPLICATION_JSON_VALUE)
@Api(value = "restController ")
class RestController {
    private final Service service;

    @PostMapping(value = "/foo", consumes = {MULTIPART_FORM_DATA_VALUE})
    public ResponseDTO foo(
            @ModelAttribute RequestDTO dto
    ) {
        return service.foo(dto);
    }

}

对应的请求DTO RequestDTO:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class RequestDTO {
    private MultipartFile file;
    private SomeOtherObject someOtherObject;
}

问题现象

当发送无参数请求时,系统抛出HttpMediaTypeNotSupportedException,日志报错:

.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type '' not supported]

接口直接返回415 Unsupported Media Type响应,无法进入接口方法内部对RequestDTO的字段(如file)做自定义校验并返回提示。

约束条件

  • 使用Spring Boot 2.7.4版本
  • 不通过全局异常处理解决问题
  • 必须使用@ModelAttribute而非@RequestBody
  • 曾尝试更换媒体类型,未解决问题

解决方案

要让无参数请求进入接口方法,核心是让Spring在请求无Content-Type时也能正常解析@ModelAttribute对象,可通过以下两种方式实现:

方式1:修改@PostMapping的consumes属性

在consumes中添加MediaType.ALL_VALUE,让Spring接受任何Content-Type(包括空值)的请求,从而进入方法处理:

@PostMapping(value = "/foo", consumes = {MULTIPART_FORM_DATA_VALUE, MediaType.ALL_VALUE})
public ResponseDTO foo(
        @ModelAttribute RequestDTO dto
) {
    // 自定义字段校验逻辑
    if (dto.getFile() == null) {
        return new ResponseDTO("文件不能为空");
    }
    return service.foo(dto);
}

方式2:自定义HttpMessageConverter处理空Content-Type请求

创建自定义消息转换器,允许处理空Content-Type的请求:

@Component
public class EmptyContentTypeConverter extends FormHttpMessageConverter {
    @Override
    public boolean canRead(Class<?> clazz, MediaType mediaType) {
        // 允许解析空Content-Type的请求
        return mediaType == null || super.canRead(clazz, mediaType);
    }
}

注册该转换器后,Spring会在遇到空Content-Type时用它解析参数,请求就能进入接口方法,之后即可执行自定义校验逻辑。

关键说明

  • 添加MediaType.ALL_VALUE后,Spring不会因空Content-Type直接抛出415异常,会尝试用合适的转换器解析参数,即使无参数也能实例化RequestDTO并传入方法。
  • 进入方法后,可通过手动判断字段或结合@Valid+BindingResult实现校验,返回自定义提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 18:45:07