[Javascript] Ajax请求Spring中导出poi生成的Excel问题
关键字
poi
excel
ajax
get
ResponseEntity
背景信息/现象/问题
通过poi生成excel,在controller层返回
ResponseEntity<byte[]>
类型的二进制文件,但是ajax不能获取,因为ajax接受的是字符串.
根本原因
因为导出excel,实际上是文件下载,后台需要往前端(浏览器)写文件流的。而Ajax请求获取数据都是“字符串”,整个交互传输用的都是字符串数据,它没法解析后台返回的文件流,但浏览器可以
也就是说ajax通过我背景信息中的方法从更上是不能导出excel的
解决方法
- poi生成excel文件到服务器某个具体文件夹,将地址给到ajax的result结果中,让用户自行点击下载,也就是用get方法下载,而不是用ajax方法
- 直接通过get请求访问
新的问题
因为这个项目采用了JWT + SpringSecurity的鉴权方法,每次通过ajax访问时是在header中加了鉴权信息的,而百度后发现get请求是不能添加header信息的,所以用get请求访问过去会被SpringSecurity拦截,我的临时解决方案是:对应解决方法
- SpringSecurity对某一个地址不进行鉴权,可以直接访问
- 在get请求中将鉴权信息通过参数的方式传到controller层
- controller收到请求,不使用默认的方法(从header里)解析出来用户信息,而是新写了个从参数中读鉴权信息再鉴权
参考:
https://www.cnblogs.com/skytoangel/p/11276233.html