Springboot與vue實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出方法具體介紹
提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔
前言
這兩天在項(xiàng)目中使用到Java的導(dǎo)入導(dǎo)出功能,以前對(duì)這塊有一定了解,但是沒有系統(tǒng)學(xué)習(xí)過,今天在這里進(jìn)行記錄,方便以后查閱。
一、需求
項(xiàng)目的需求是將項(xiàng)目中的JSON實(shí)體數(shù)據(jù)導(dǎo)出為.json文件,導(dǎo)出的文件,可以作為元數(shù)據(jù)導(dǎo)入進(jìn)行實(shí)體初始化。項(xiàng)目不是使用普通的springboot框架(普通的springboot框架很容易完成),因此走了一些彎路,在這篇文章中,將先講解使用springboot框架進(jìn)行導(dǎo)出,然后再講解非springboot框架的導(dǎo)出。
二、Springboot進(jìn)行數(shù)據(jù)導(dǎo)出
1.Java后端代碼
@RequestMapping("/download") public void download(String path, HttpServletResponse response) { // 固定寫法 response.setContentType("application/OCTET-STREAM;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); File file = new File(path); try { InputStream fis = new FileInputStream(file); OutputStream out = new BufferedOutputStream(response.getOutputStream()); byte[] buffer = new byte[1024]; int len; while ((len = fis.read(buffer)) != -1) { out.write(buffer, 0, len); out.flush(); } } catch (Exception e) { throw new RuntimeException(e); } }
導(dǎo)出操作時(shí),返回值類型必須為void,由于項(xiàng)目有指定的返回格式(返回值類型不能為void),導(dǎo)致類型不匹配報(bào)錯(cuò),在新寫了處理方法之后,解決了這個(gè)問題。 這里使用了BufferedOutputStream,能加快導(dǎo)出速度。不用BufferedOutputStream,只使用response.getOutputStream()也是可以的。此外,這里使用了循環(huán)寫入輸出流中,而不是一次寫入。
2.Vue前端代碼
handleExport(row) { const id = row.id || this.ids const name = row.name || this.names[0] const code = row.code || this.codes const params = { exportCodes: JSON.stringify(code) } this.download('/Thingmax/Things/Export', params, name + '.json') },
download方法第一個(gè)參數(shù)是導(dǎo)出方法的響應(yīng)路由,第二個(gè)參數(shù)為導(dǎo)出時(shí)攜帶的參數(shù),第三個(gè)參數(shù)為導(dǎo)出的文件名稱。
3.其他幾種Java后端導(dǎo)出方法
1、使用BufferedOutputStream,一次性寫入
exportEntities.put("Entities", entities); String content = exportEntities.toJSONString(); try { BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream()); out.write(content.getBytes(StandardCharsets.UTF_8)); out.flush(); out.close(); } catch (Exception e) { throw new RuntimeException(e); }
一次性將數(shù)據(jù)讀取到內(nèi)存,通過響應(yīng)輸出流輸出到前端
2、不使用BufferedOutputStream,循環(huán)寫入
InputStream inputStream = new FileInputStream(path); ServletOutputStream outputStream = response.getOutputStream(); byte[] b = new byte[1024]; int len; //從輸入流中讀取一定數(shù)量的字節(jié),并將其存儲(chǔ)在緩沖區(qū)字節(jié)數(shù)組中,讀到末尾返回-1 while ((len = inputStream.read(b)) > 0) { outputStream.write(b, 0, len); }
到此這篇關(guān)于Springboot與vue實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出方法具體介紹的文章就介紹到這了,更多相關(guān)Springboot數(shù)據(jù)導(dǎo)出內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java.io.UncheckedIOException: Cannot delete C
本文主要介紹了java.io.UncheckedIOException: Cannot delete C:\Users\guo\AppData\Local\Temp\tomcat.8081問題,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05簡(jiǎn)單了解JAVA SimpleDateFormat yyyy和YYYY的區(qū)別
這篇文章主要介紹了簡(jiǎn)單了解JAVA SimpleDateFormat yyyy和YYYY的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03spring boot(三)之Spring Boot中Redis的使用
這篇文章主要介紹了spring boot(三)之Spring Boot中Redis的使用,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05使用Gson將字符串轉(zhuǎn)換成JsonObject和JsonArray
這篇文章主要介紹了使用Gson將字符串轉(zhuǎn)換成JsonObject和JsonArray,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02mybatis遞歸 一對(duì)多的實(shí)現(xiàn)方法示例
這篇文章主要給大家介紹了關(guān)于mybatis遞歸 一對(duì)多實(shí)現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08Spring復(fù)雜對(duì)象創(chuàng)建的方式小結(jié)
這篇文章主要介紹了Spring復(fù)雜對(duì)象創(chuàng)建的三種方式,現(xiàn)在使用Spring如何創(chuàng)建這種類型的對(duì)象?Spring中提供了三種方法來創(chuàng)建復(fù)雜對(duì)象,需要的朋友可以參考下2022-01-01