2017-02-17 2 views
0

У меня есть приложение ExtJS, которое показывает PDF-файл из приложения загрузки весны с помощью службы REST. Пока это отлично работает, но когда я обновил версию Spring-загрузки от версии 1.3 -> 1.4, код не работает нормально и показывает мне чистый PDF в качестве ответа.Печать удаленного pdf в Sencha ExtJs из приложения Spring-Boot не работает

Это мой код:

ExtJS - Сенча

Ext.Ajax.request({ 
    url: MyApp.Application.Globals.baseUrl + url, 
    params: params, 
    method: 'POST', 
    async: false, 
    headers:{ 
     'Authorization': Utils.getAuthorization() 
    }, 
    scope : this, 
    // ON SUCCESS 
    success: function(response) { 
     window.open('data:application/pdf,' + escape(response.responseText)); 
    }, 
    // ON FAILURE 
    failure: function(err) { 
     console.log(err); 
    } 
}); 

сервера кода (Spring-Boot)

String report = reportService.executeReport(....); 

response.setContentType("application/pdf"); 

try { 
    response.getWriter().write(report); 
} catch (IOException e) { 
    ELogger.error(this, CoreConstants.LOGGER_CATEGORY, "error creating pdf", e); 
} 

POM

<spring-boot.version>1.4.4.RELEASE</spring-boot.version> with 1.3.3 it works fine 

Если кто-нибудь может мне помочь , Я буду благодарен.

С уважением!

+0

Наконец я нашел workaroung, я должен изменить объект respone, теперь у меня есть –

ответ

0

Я нашел обходной путь, используя ResponseEntity в ответ:

@RequestMapping(value = "/example", produces = "application/pdf") 
public ResponseEntity<InputStreamResource> exampleMethod(){ 

    HttpHeaders headers = new HttpHeaders(); 
    headers.setContentType(MediaType.parseMediaType("application/pdf")); 
    headers.add("Access-Control-Allow-Origin", "*"); 
    headers.add("Access-Control-Allow-Methods", "GET, POST, PUT"); 
    headers.add("Access-Control-Allow-Headers", "Content-Type"); 
    headers.add("Content-Disposition", "filename=sysparamspdf"); 
    headers.add("Cache-Control", "no-cache, no-store, must-revalidate"); 
    headers.add("Pragma", "no-cache"); 
    headers.add("Expires", "0"); 

    headers.setContentLength(report.getBytes(StandardCharsets.UTF_8).length); 
    ResponseEntity<InputStreamResource> response = new ResponseEntity<InputStreamResource>(
      new InputStreamResource(stream), headers, HttpStatus.OK); 
    return response; 

}

Смежные вопросы