![](/img/trans.png)
[英]Spring Boot: Best way to return 503 HttpStatus in ResponseEntity if the DataSource is DOWN
[英]HttpStatus with ResponseEntity and pdf
我有一个弹簧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。 可能吗?
任何帮助将不胜感激。
我对此不太确定,但是我认为该方法返回的是HttpServletResponse
,而不是您返回的对象。
我认为您应该尝试使用HttpServletResponse.getWriter().write(responseEntity.getBody())
和HttpServletResponse.setHttpStatus(responseEntity.getHttpStatus())
或仅使用等效的硬编码值进行实验...
另外,您是否同时看到错误和200状态? 如果是这样,请尝试将实体参数化为字符串-放置在其中的任何Throwable应该仍然可以正常工作。
如果您尝试这样做,请告诉我,但该方法不起作用,因此我可以编辑或删除此答案-我实际上尚未尝试过此方法,但是有兴趣了解为什么该代码不起作用。
理想的方法是在getPDF()中设置响应状态( response.setStatus(statusCode) )
,该状态返回可以显示给客户端的String消息 。 现在,您可以使用response.getStatus()
获取状态,并可以将响应提供给客户端。 您告诉您要下载PDF文件,而不管其中的状态码是什么,下面的代码都一样。 但是我认为, 当某些条件不满足时,您不应退还PDF文件。
由于我不知道要针对哪个条件使用状态500,因此我创建了一个样本,该样本随机生成数字,并根据条件设置响应代码。
@RequestMapping(value = "/obtain/downloadPDF", method = RequestMethod.GET, produces = "application/pdf")
public ResponseEntity<?> getPdfFile(HttpServletResponse response,HttpServletRequest request) throws IOException{
response.setHeader("Content-disposition", "inline; filename=\"" +"file.pdf" +"\"");
String message = getPDF(response, request);
System.out.println("statusCodeString: "+message + "Status: "+response.getStatus());
return new ResponseEntity<>(message,(response.getStatus() == 500 ? HttpStatus.INTERNAL_SERVER_ERROR : HttpStatus.OK));
}
private String getPDF(HttpServletResponse response, HttpServletRequest request) {
int min = 0;
int max = 10;
int num = (int) min + (int)(Math.random() * ((max - min) + 1));
System.out.println("Number: "+num);
if(num<=5)
{
response.setStatus(200);
return "200 <message for 200>";
}
else
{
response.setStatus(500);
return "500 <message for 500>";
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.