::):
@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();
}
実際に406が何であるか、エラーが何を伝えているのか確認しましたか?それは、あなたが何かを要求しているがpdfは要求していないことを伝えています。あなたのマッピングでは、 'application/pdf'を返すと明示的に述べていますが、あなたのブラウザはおそらく' text/html'と他のいくつかのヘッダを持っているでしょう。これらは一致しないため、エラーになります。 URLに '.pdf'を追加することで、正しい変換とヘッダーがトリガーされるので、これを修正します。 –
はい、それは受け入れられたフォーマットとしてpdfを設定しません。私のURLは正しい:http:// localhost:8086/DART/fleetAndCar /アプリケーション/車/買収/ pdf/179/13_Test2.pdf – luca