java - 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。可能吗?
任何帮助将不胜感激。
解决方案
我对此不是 100% 确定,但我认为该方法正在返回 中的任何内容HttpServletResponse
,而不是您返回的对象。
我认为您应该尝试使用HttpServletResponse.getWriter().write(responseEntity.getBody())
and HttpServletResponse.setHttpStatus(responseEntity.getHttpStatus())
,或者只是等效的硬编码值...
另外,您是否看到错误和 200 状态并排显示?如果是这样,请尝试将实体参数化为字符串 - 您放入的任何 Throwable 都应该可以正常工作。
如果您尝试这样做但它不起作用,请告诉我,以便我可以编辑或删除这个答案 - 我实际上还没有尝试过,但有兴趣找出为什么该代码不起作用。
推荐阅读
- xaml - Xamarin 在两列中形成 CollectionView 数据在 iO 上的行中不对齐
- java - 尝试将按钮交换到某些矩形
- linux - 脚本的时间部分(运行时间)
- javascript - 使用 JS 在本地(客户端)处理上传的 JSON 文件的最佳方式
- arrays - C(指针)中几乎相同的代码的不同结果
- scala - 我将如何在 spark scala 中进行此数据帧转换?
- java - 打印机使用批量传输在 Java 中打印稀有字符
- powershell - 从 cmd / batch 运行 powershell 命令
- java - 如何对具有列表列表的自定义对象进行排序
- r - 按字符向量列表过滤数据帧