2016-04-14 9 views
1

Ich entwickle eine Springboot Rest-basierte Web-App. Einer der WS muss ein DOCX-Dokument zurückgeben. Der Code ist:Java Rest WS zum Herunterladen docx

@RequestMapping(value = "/get-doc",method = RequestMethod.GET, produces="application/vnd.openxmlformats-officedocument.wordprocessingml.document") 
public @ResponseBody HttpEntity<File> getDoc() { 
    File file = userService.getDocx(); 
    HttpHeaders header = new HttpHeaders(); 
    header.set("Content-Disposition", "attachment; filename=DocxProject.docx"); 
    header.setContentLength(file.length()); 

    return new HttpEntity<File>(file,header); 
} 

aber ich bin dieser Fehler auftritt:

org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation 

ich andere Fragen gesucht, aber keiner von ihnen gab mir eine Lösung, vor allem weil sie javax.ws.rs benutzen, aber ich Ich will mich nicht darauf verlassen.

Was ich suche ist eine Lösung für den Fehler, den ich bekomme oder eine Alternative zu meinem Code (nicht javax.ws.rs abhängig).

Vielen Dank im Voraus.

+0

Sieht aus wie filter header Content-type. –

Antwort

1

Versuchen Sie, Array von Bytes zurückzugeben. Vereinfachen Sie den Code:

@RequestMapping(value = "/get-doc",method = RequestMethod.GET, produces="application/vnd.openxmlformats-officedocument.wordprocessingml.document") 
public @ResponseBody byte[] getDoc() { 
    File file = userService.getDocx(); 
    FileInputStream fis = new FileInputStream(file); 
    byte[] doc = IOUtils.toByteArray(fis); 
    return doc; 
} 

IOUtils ist von org.apache.commons.io.IOUtils. Ich habe nicht getestet, aber ich habe eine ähnliche Methode, die ein Bild zurückgibt. Ich hoffe das hilft dir.

+0

Sie haben mich auf die Lösung hingewiesen. Ich änderte mi "File" zu "byte []" und benutzte IOUtils wie du gesagt hast, aber ich habe HttpEntity behalten und jetzt funktioniert es. Vielen Dank!! –

0

Sie können den Stream direkt als Antwort festlegen.

@RequestMapping(value = "/get-doc",method = RequestMethod.GET) 
public void getDoc(HttpServletResponse response){ 
    InputStream inputStream = new FileInputStream(file); 
    IOUtils.copy(inputStream, response.getOutputStream()); 
    .. 
    response.flushBuffer(); 
}