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();
}
我正在开发一个基于 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();
}