【问题标题】:HttpStatus with ResponseEntity and pdfHttpStatus 与 ResponseEntity 和 pdf
【发布时间】:2019-11-22 10:22:06
【问题描述】:

我有一个 spring mvc 控制器,它产生一个“应用程序/pdf”来下载生成的 pdf。我想始终返回 pdf 并根据某些条件返回不同的 HTTP 代码。

我尝试返回一个 ResponseEntity 对象,但 PDF 的响应总是 200(总是生成 pdf,但我需要不同的状态响应)。

@RequestMapping(value = "/obtain/downloadPDF", method = RequestMethod.GET, produces = "application/pdf")
@ResponseBody
public ResponseEntity<?> getPdfFile(HttpServletResponse response,HttpServletRequest request) throws IOException{

    response.setHeader("Content-disposition", "inline; filename=\"" +"file.pdf" +"\"");
    String error = getPDF(response, request);
    logger.debug("PDF error : " + StringUtils.defaultIfEmpty(error,"null") );
    return new ResponseEntity<>("",HttpStatus.INTERNAL_SERVER_ERROR);
}

注意:在getPDF方法中,只是生成pdf并将其写入response.getOutputStream()的代码

我的想法是我想始终在输出流中返回 pdf,但结果代码不同(200、500 等)。我返回 500 时的事件,我想返回 PDF。有可能吗?

任何帮助将不胜感激。

【问题讨论】:

  • 您好,您是如何在 getPDF() 中返回错误的,请分享代码
  • 错误是如何产生的并不重要,因为总是返回 200,即使我直接使用:return new ResponseEntity(Http Status.INTERNAL_SERVER_ERROR)
  • 如果您的 getPDF() 正在返回一些字符串,无论是否存在错误,那么它总是不为空,总是给出 200。所以你能检查一下并告诉我
  • 我在最初的帖子中更改了代码,因为它可能令人困惑,因为如果我在 responseEntity 中直接返回 500,浏览器将返回 pdf 和 200。
  • 你好 moisesbelda,看看我的回答,让我知道你的想法

标签: java spring spring-mvc


【解决方案1】:

我对此不是 100% 确定,但我认为该方法返回的是 HttpServletResponse 中的任何内容,而不是您返回的对象。

我认为您应该尝试使用 HttpServletResponse.getWriter().write(responseEntity.getBody())HttpServletResponse.setHttpStatus(responseEntity.getHttpStatus()),或者只是等效的硬编码值...

另外,您是否看到错误和 200 状态并排显示?如果是这样,请尝试将实体参数化为字符串 - 您放入的任何 Throwable 都应该可以正常工作。

如果您尝试这样做但它不起作用,请告诉我,以便我可以编辑或删除此答案 - 我实际上还没有尝试过,但有兴趣找出该代码不起作用的原因。

【讨论】:

  • 响应为 200 和一个 pdf(因为在 getPDF 中,一个 pdf 被写入输出流)。不显示错误字符串,如果我直接输入500,我的结果相同,我的意思是,总是强制500)。
猜你喜欢
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 2017-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多