我有一个 spring mvc Controller ,它生成一个“application/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。可能吗?
任何帮助将不胜感激。
最佳答案
我对此不是 100% 确定,但我认为该方法返回的是 HttpServletResponse
中的任何内容,而不是您返回的对象。
我认为您应该尝试使用 HttpServletResponse.getWriter().write(responseEntity.getBody())
和 HttpServletResponse.setHttpStatus(responseEntity.getHttpStatus())
,或者只是等效的硬编码值...
此外,您是否同时看到错误和 200 状态?如果是这样,请尝试将实体参数化为字符串 - 无论您放入其中的任何 Throwable 都应该可以正常工作。
如果您尝试这样做但不起作用,请告诉我,以便我可以编辑或删除此答案 - 我实际上尚未尝试过此操作,但有兴趣找出该代码不起作用的原因。
关于java - 带有 ResponseEntity 的 HttpStatus 和 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57010533/