[Javascript] Ajax請求Spring中導出poi生成的Excel問題

[Javascript] Ajax請求Spring中導出poi生成的Excel問題

關鍵字
poi
excel
ajax
get
ResponseEntity

背景信息/現象/問題

在這裏插入圖片描述
通過poi生成excel,在controller層返回
ResponseEntity<byte[]>
類型的二進制文件,但是ajax不能獲取,因爲ajax接受的是字符串.

根本原因

因爲導出excel,實際上是文件下載,後臺需要往前端(瀏覽器)寫文件流的。而Ajax請求獲取數據都是“字符串”,整個交互傳輸用的都是字符串數據,它沒法解析後臺返回的文件流,但瀏覽器可以

也就是說ajax通過我背景信息中的方法從更上是不能導出excel的

解決方法

  1. poi生成excel文件到服務器某個具體文件夾,將地址給到ajax的result結果中,讓用戶自行點擊下載,也就是用get方法下載,而不是用ajax方法
  2. 直接通過get請求訪問

    新的問題

    因爲這個項目採用了JWT + SpringSecurity的鑑權方法,每次通過ajax訪問時是在header中加了鑑權信息的,而百度後發現get請求是不能添加header信息的,所以用get請求訪問過去會被SpringSecurity攔截,我的臨時解決方案是:

    對應解決方法

    1. SpringSecurity對某一個地址不進行鑑權,可以直接訪問
    2. 在get請求中將鑑權信息通過參數的方式傳到controller層
    3. controller收到請求,不使用默認的方法(從header裏)解析出來用戶信息,而是新寫了個從參數中讀鑑權信息再鑑權

參考:

https://www.cnblogs.com/skytoangel/p/11276233.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章