2016-06-22 12 views
0

私は新しいタブでpdfを開きたいので私のスプリングコントローラはそうです(私は理由はわかりませんが、私のurlパラメータも.pdf拡張子私はこのコードで解決The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers. は、どのように私は私のヘッダーを設定しなければならないのおかげスプリングコントローラが不正なヘッダを含むPDFインラインを返します

+0

実際に406が何であるか、エラーが何を伝えているのか確認しましたか?それは、あなたが何かを要求しているがpdfは要求していないことを伝えています。あなたのマッピングでは、 'application/pdf'を返すと明示的に述べていますが、あなたのブラウザはおそらく' text/html'と他のいくつかのヘッダを持っているでしょう。これらは一致しないため、エラーになります。 URLに '.pdf'を追加することで、正しい変換とヘッダーがトリガーされるので、これを修正します。 –

+0

はい、それは受け入れられたフォーマットとしてpdfを設定しません。私のURLは正しい:http:// localhost:8086/DART/fleetAndCar /アプリケーション/車/買収/ pdf/179/13_Test2.pdf – luca

答えて

0

::):

@PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_FLEET_ENG', 'ROLE_VIEW_ENG')") 
@Override 
@RequestMapping(value = { "applications/cars/acquisitions/pdf/{idAcquisition}/{pdfName}"},produces = "application/pdf", method = RequestMethod.GET) 
public @ResponseBody ResponseEntity<byte[]> showPdf(@PathVariable("idAcquisition") int idAcquisition, @PathVariable("pdfName") String pdfName){ 
    try { 
     byte[] pdfContents = fleetAndCarService.showPdf(idAcquisition, pdfName + ".pdf"); 
     HttpHeaders headers = new HttpHeaders(); 
     headers.setContentType(MediaType.parseMediaType("application/pdf")); 
     headers.add("content-disposition", "inline; filename=" + pdfName +".pdf"); 
     ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(
       pdfContents, headers, HttpStatus.OK); 
     return response;  
    } 
    catch (Exception e) { 
     ErrorResponse errorResponse= ErrorResponseBuilder.buildErrorResponse(e); 
     LOG.error("Threw exception in FleetAndCarControllerImpl::showPdf :" + errorResponse.getStacktrace()); 
     //TODO what do I have to return? 
     return null; 
    } 
} 

が、私は406エラーが発生する?

@PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_FLEET_ENG', 'ROLE_VIEW_ENG')") 
@Override 
@RequestMapping(value = { "applications/cars/acquisitions/pdf/{idAcquisition}/{pdfName}"}, method = RequestMethod.GET) 
public void showPdf(HttpServletResponse response, @PathVariable("idAcquisition") int idAcquisition, @PathVariable("pdfName") String pdfName){ 
    File pdfFile= null;; 
    try { 
     pdfFile = fleetAndCarService.showPdf(idAcquisition, pdfName + ".pdf"); 
    } catch (Exception e) { 
     ErrorResponse errorResponse= ErrorResponseBuilder.buildErrorResponse(e); 
     LOG.error("Threw exception in FleetAndCarControllerImpl::showPdf :" + errorResponse.getStacktrace()); 
    } 
    try(InputStream is = new FileInputStream(pdfFile.getAbsolutePath());) { 
     setResponse(response, is, pdfFile, "inline; filename="); 
    } 
    catch (Exception e) { 
     ErrorResponse errorResponse= ErrorResponseBuilder.buildErrorResponse(e); 
     LOG.error("Threw exception in FleetAndCarControllerImpl::showPdf :" + errorResponse.getStacktrace()); 
    } 
} 

とプライベートメソッド

private void setResponse(HttpServletResponse response, InputStream is, File file, String useOfFile) throws Exception{ 
     response.setHeader("Expires", "0"); 
     response.setHeader("Cache-Control","must-revalidate, post-check=0, pre-check=0"); 
     response.setContentType(Files.probeContentType(file.toPath())); 
     response.setHeader("Content-Description"," File Transfer"); 
     response.setHeader("Content-Disposition", useOfFile + file.getName()); 
     response.setHeader("Content-Transfer-Encoding"," binary"); 
     long size = Utils.stream(is, response.getOutputStream()); 
     response.addHeader("Content-Length", Long.toString(size)); 
     response.flushBuffer(); 
    } 
関連する問題