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

Spring控制器导出带图表Excel时遇415不支持媒体类型错误

Spring控制器导出带图表Excel时415媒体类型不兼容问题

我开发了一个可生成带图表Excel文件的Spring控制器,但修改映射的produces属性后,始终遇到415错误:"不支持媒体类型(octet-stream)"。

请求头信息(Postman截图内容)

请求头配置:

  • Content-Type: application/json
  • Accept: application/octet-stream

控制器代码

@PostMapping(value = "/exportfile/excel", produces = {MediaType.APPLICATION_OCTET_STREAM_VALUE})
public ResponseEntity<InputStreamResource> exportExcel(@RequestBody ClientDataObjectRequest clientDataObjectRequest) {

    ByteArrayInputStream file = generateCSVExcelService.generateFileDetailsWithChart(clientDataObjectRequest);

    String dateFile = new SimpleDateFormat("MM-dd-yyyy").format(new java.util.Date());
    String timeFile = new SimpleDateFormat("HH-mm").format(new java.util.Date());
    String fileName = clientDataObjectRequest.getMetricName().replace(" ","_") + "_" + dateFile + "T" + timeFile;

    HttpHeaders headers = new HttpHeaders();
    headers.setContentDispositionFormData("attachment", fileName + ".xlsx");
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    //headers.set(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + fileName + ".xlsx");
    //headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE);

    return new ResponseEntity<>(new InputStreamResource(file), headers, HttpStatus.OK);
}

我已经在produces中设置了APPLICATION_OCTET_STREAM_VALUE,请求和响应头也做了对应配置,但还是报错,请问我遗漏了什么?

请求体(JSON格式)

{
    "metricName":"Turnover Rate",
    "dataFormatCodeValue": "currency",
    "clientDataRequest":[
       {
          "clientName":"client 1",
          "value":"1"
       },
       {
          "clientName":"client 2",
          "value":"2"
       },
       {
          "clientName":"client 3",
          "value":"53.78"
       },
       {
          "clientName":"client 4",
          "value":"3"
       },
       {
          "clientName":"client 5555555",
          "value":"4"
       },
       {
          "clientName":"client 6",
          "value":"33"
       },
       {
          "clientName":"client 7",
          "value":"0"
       },
       {
          "clientName":"client 8",
          "value":"8.5"
       }
    ]
}

问题解决思路

415错误的核心是服务器无法处理请求发送的媒体类型,你的问题出在这几个地方:

  1. 补全请求媒体类型声明
    produces是定义响应的媒体类型,而你用@RequestBody接收JSON请求体,却没在@PostMapping里声明支持的请求类型,加上consumes配置即可:

    @PostMapping(value = "/exportfile/excel", 
                 produces = {MediaType.APPLICATION_OCTET_STREAM_VALUE},
                 consumes = MediaType.APPLICATION_JSON_VALUE)
    
  2. 检查JSON解析依赖
    确保项目里有Jackson相关依赖(Spring Boot的spring-boot-starter-web默认包含),纯Spring项目需手动引入jackson-databind,否则无法解析JSON请求体。

  3. 确认请求头的Content-Type
    检查Postman里的Content-Type是否确实是application/json,不要误设成application/octet-stream——后者是你期望的响应类型,不是请求类型。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:03:37