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

Spring接口报错Content type 'application/octet-stream' not supported求助

解决Spring Controller报错“Content type 'application/octet-stream' not supported”的方案

我来帮你一步步排查这个问题,结合你的代码和使用Postman的场景,大概率是参数配置或注解使用的问题,下面是具体的分析和解决步骤:

先梳理下你的场景

你用Postman发送多部分表单请求到Spring Boot的ChallengeController,目标是创建包含DTO和文件的Challenge,但一直收到Content type 'application/octet-stream' not supported的报错,调整@RequestMapping的consumes属性也没效果。你的Controller代码如下:

@RestController
@RequestMapping(path = RestPath.CHALLENGE)
public class ChallengeController {
    private final ChallengeService<Challenge> service;

    @Autowired
    public ChallengeController(ChallengeService service) {
        this.service = service;
    }

    @ApiOperation(value = "Creates a new challenge in the system")
    @RequestMapping(method = RequestMethod.POST, 
                    consumes = {MediaType.MULTIPART_FORM_DATA_VALUE, MediaType.APPLICATION_OCTET_STREAM_VALUE}, 
                    produces = MediaType.APPLICATION_JSON_VALUE)
    @ResponseStatus(HttpStatus.CREATED)
    public ChallengeDto create(@ApiParam(value = "The details of the challenge to create") 
                               @RequestPart("challengeCreate") @Valid @NotNull @NotBlank ChallengeCreateDto challengeCreate,
                               @ApiParam(value = "The challenge file") 
                               @RequestPart("file") @Valid @NotNull @NotBlank MultipartFile file) {
        return service.create(challengeCreate, file);
    }
}

可能的原因及解决方法

1. Postman参数的Content-Type设置错误

使用@RequestPart接收多部分数据时,每个字段的Content-Type必须匹配后端期望的类型:

  • 对于challengeCreate这个DTO参数:你需要在Postman的form-data里把它的类型设为text,输入JSON格式的内容,然后手动指定该字段的Content-Type为application/json(不要用默认的text/plain)。
  • 对于file参数:Postman会自动识别文件类型并设置对应的Content-Type,不要手动改成application/octet-stream——Spring的MultipartFile能处理绝大多数文件类型,强行指定反而会导致不兼容。
    另外,整个请求的头部Content-Type必须是multipart/form-data; boundary=xxxx(Postman会自动生成boundary,别手动修改),如果误设成application/octet-stream,直接就会触发报错。

2. @NotBlank注解用错了地方

注意到你给ChallengeCreateDto和MultipartFile都加了@NotBlank注解——这个注解只适用于字符串类型!对于引用类型的DTO,用@NotNull就足够了;对于MultipartFile,@NotNull可以确保文件不为空,@NotBlank在这里完全不起作用,甚至可能导致Spring的校验逻辑混乱,抛出误导性的错误信息。

修改后的参数注解应该是这样:

public ChallengeDto create(@ApiParam(value = "The details of the challenge to create") 
                           @RequestPart("challengeCreate") @Valid @NotNull ChallengeCreateDto challengeCreate,
                           @ApiParam(value = "The challenge file") 
                           @RequestPart("file") @Valid @NotNull MultipartFile file) {
    return service.create(challengeCreate, file);
}

3. 检查Spring Boot的Multipart配置

虽然Spring Boot默认启用了Multipart支持,但如果有自定义配置,确认下application.properties里的相关项是否正确:

# 确保Multipart支持开启(默认是true)
spring.servlet.multipart.enabled=true
# 根据你的需求调整文件大小限制
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

4. 额外排查点

如果上面的方法都没用,你可以提供Postman请求的完整头部截图,或者ChallengeCreateDto的代码,这样能更精准定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:15:54