java - 带有 ResponseEntity 的 HttpStatus 和 pdf

标签 java spring spring-mvc

我有一个 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/

相关文章:

方法覆盖中的Java静态变量

spring - 是否可以避免自定义 @Query 的类型转换?

mongodb - spring data mongodb 按集合查找

java - Spring MVC 上下文 bean : Is it bad to modify objects from getBean()? 线程问题

java - hibernate + Spring 应用程序。在使用数据库之前添加逻辑

java - 使用 RedirectAttribute 的 Spring MVC 测试映射

java - Spring Boot - 请求映射不接受尾部斜杠或多个目录

java - 当有多个参数时,方法引用如何工作

java - Lombok @Data 注释将字段名称从 isood 更改为 good

java - 在 Struts 2 表单中显示 SimpleCaptcha