Java休息WS下载docx

Java rest WS to download docx

我正在开发一个基于 Springboot rest 的网络应用程序。其中一个WS必须return一个.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);
}

但我遇到了这个错误:

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

我搜索了其他问题,但其中 none 给了我一个解决方案,主要是因为他们使用 javax.ws.rs 但我不想依赖它。

我正在寻找的是我遇到的错误的解决方案或我的代码的替代方案(不依赖 javax.ws.rs)。

提前致谢。

尝试 returning 字节数组。简化您的代码:

@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 来自 org.apache.commons.io.IOUtils。我没有测试过,但我有一个类似的方法 return 一张图片。希望对你有帮助。

您可以直接在响应中设置流。

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