Java 使用ajax调用处理资源

Java 使用ajax调用处理资源,java,ajax,spring,rest,Java,Ajax,Spring,Rest,我的应用程序假设从DB下载文件 控制器: @GetMapping(value = "/download/{id}") public ResponseEntity<Resource> downloadBook(@PathVariable Long id) { Book book = bookService.findById(id); return ResponseEntity.ok().contentType(MediaType.APPLICATION_PDF) .

我的应用程序假设从DB下载文件

控制器:

@GetMapping(value = "/download/{id}")
public ResponseEntity<Resource> downloadBook(@PathVariable Long id) {

Book book = bookService.findById(id);

return ResponseEntity.ok().contentType(MediaType.APPLICATION_PDF)
        .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + book.getFileName() + ".pdf\"")
        .body(new ByteArrayResource(book.getFile()));

}

这里发生的事情是,您的ajax请求被发送到
/book/download/
,正如
url:
参数中指定的那样。当请求成功完成时,它将触发
success
回调。但是,您在那里所做的只是显示一个警报-带有
警报(“success!”)
-因此不会再发生任何事情

链接的答案解释了为什么不能像您想象的那样简单地使用ajax实现这一点。我没有重复所有的链接答案,因为已经在那里解释过了,但是这个答案的原理对于你的问题是完全一样的

downloadBook : function(bookId) {
    window.location = basePath + '/book/download/' + bookId
}
我的downloadBook方法现在看起来像这样,它解决了我的问题

downloadBook : function(bookId) {
    window.location = basePath + '/book/download/' + bookId
}