簡體   English   中英

具有ResponseEntity和pdf的HttpStatus

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM