【问题标题】:Getting "Unsupported Media Type" error 415 (octet-stream)获取“不支持的媒体类型”错误 415(八位字节流)
【发布时间】:2023-02-02 10:45:55
【问题描述】:

我开发了一个控制器,它生成一个带有图表的 excel 文件,但是当我从映射中更改属性“produces”时,我总是会收到标题中提到的错误。
这是邮递员的标题

而且,这是控制器代码

 @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"
       }
    ]
}

【问题讨论】:

  • Content-Type HTTP header 表示请求的内容类型。您实际上是在发送 octet-stream 作为数据吗?您为要使用的端点配置了什么内容类型?
  • @Turing85 我不确定我是否明白你的问题。我有一个 json 格式的请求正文,我需要将其转换为可下载的 excel 文件,这就是我正在尝试使用上面的代码。
  • 如果请求体是json,那么你应该发送application/json的Content-Type,而不是application/octet-stream。
  • 但是,让我感到困惑的是,邮递员通常会自动将 Content-Type 标头设置为 Body 选项卡中配置的内容。您是否将Body 选项卡中的类型设置为json?
  • 因此,我对内容类型进行了两项更改,但仍然出现相同的错误。另外,我将正文类型设置为 json。你是对的,邮递员会自动设置内容类型,但我只想确保它是一个八位字节流。是否需要更改请求和响应标头“接受”或其他内容?

标签: java spring-boot http-headers


【解决方案1】:

我发现。我不得不将这两个参数放在@PostMapping中:produces和consumes

@PostMapping(value = "/exportfile/excel", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-13
    • 2018-07-25
    • 2016-09-09
    • 2017-08-28
    • 2021-10-12
    • 2017-10-23
    • 2014-10-02
    • 2014-06-21
    相关资源
    最近更新 更多