首页 > 解决方案 > HttpStatus 与 ResponseEntity 和 pdf

问题描述

我有一个 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。可能吗?

任何帮助将不胜感激。

标签: javaspringspring-mvc

解决方案


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

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

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

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


推荐阅读