詳解如何使用SpringBoot實(shí)現(xiàn)下載JSON文件
概述
在 Spring Boot 中實(shí)現(xiàn)文件下載功能,可以通過(guò)將 JSON 字符串作為文件內(nèi)容返回給客戶(hù)端。以下是實(shí)現(xiàn)步驟和代碼示例:
實(shí)現(xiàn)步驟
定義接口:創(chuàng)建一個(gè) REST 控制器,用于處理文件下載請(qǐng)求。
設(shè)置響應(yīng)頭:通過(guò) HttpServletResponse 設(shè)置響應(yīng)頭,指定文件類(lèi)型和下載文件名。
返回文件內(nèi)容:將 JSON 字符串寫(xiě)入響應(yīng)輸出流。
代碼實(shí)現(xiàn)
1. 創(chuàng)建 Spring Boot 控制器
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
@RestController
@RequestMapping("/api")
public class FileDownloadController {
@GetMapping("/download-json")
public void downloadJsonFile(HttpServletResponse response) throws IOException {
// 1. 準(zhǔn)備 JSON 字符串
String jsonContent = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";
// 2. 設(shè)置響應(yīng)頭
response.setContentType("application/json"); // 文件類(lèi)型為 JSON
response.setHeader("Content-Disposition", "attachment; filename=\"data.json\""); // 設(shè)置下載文件名
// 3. 將 JSON 字符串寫(xiě)入響應(yīng)輸出流
response.getOutputStream().write(jsonContent.getBytes(StandardCharsets.UTF_8));
response.getOutputStream().flush();
}
}2. 運(yùn)行并測(cè)試
啟動(dòng) Spring Boot 應(yīng)用。
在瀏覽器中訪(fǎng)問(wèn)接口地址,例如:http://localhost:8080/api/download-json。
瀏覽器會(huì)自動(dòng)下載一個(gè)名為 data.json 的文件,文件內(nèi)容為:
{"name":"John", "age":30, "city":"New York"}
關(guān)鍵點(diǎn)說(shuō)明
1.HttpServletResponse:
- 用于設(shè)置響應(yīng)頭和輸出流。
- setContentType("application/json"):指定文件類(lèi)型為 JSON。
- setHeader("Content-Disposition", "attachment; filename=\"data.json\""):指定文件名為 data.json,并告訴瀏覽器以附件形式下載。
2.文件內(nèi)容寫(xiě)入:
- 使用 response.getOutputStream().write() 將 JSON 字符串寫(xiě)入響應(yīng)輸出流。
- 確保使用 StandardCharsets.UTF_8 指定字符編碼,避免亂碼問(wèn)題。
3.文件名:
可以根據(jù)需要?jiǎng)討B(tài)生成文件名,例如:
String fileName = "data_" + System.currentTimeMillis() + ".json";
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
擴(kuò)展功能
動(dòng)態(tài)生成 JSON 內(nèi)容:可以從數(shù)據(jù)庫(kù)或其他服務(wù)中獲取數(shù)據(jù),動(dòng)態(tài)生成 JSON 字符串。
壓縮文件下載:如果需要下載壓縮文件(如 .zip),可以使用 ZipOutputStream 將多個(gè)文件打包后返回。
大文件下載:對(duì)于大文件,可以使用分塊傳輸(Transfer-Encoding: chunked)來(lái)優(yōu)化性能。
示例:動(dòng)態(tài)生成 JSON 內(nèi)容
@GetMapping("/download-dynamic-json")
public void downloadDynamicJsonFile(HttpServletResponse response) throws IOException {
// 動(dòng)態(tài)生成 JSON 數(shù)據(jù)
Map<String, Object> data = new HashMap<>();
data.put("timestamp", System.currentTimeMillis());
data.put("message", "Hello, this is a dynamic JSON file!");
// 將 Map 轉(zhuǎn)換為 JSON 字符串
String jsonContent = new ObjectMapper().writeValueAsString(data);
// 設(shè)置響應(yīng)頭
response.setContentType("application/json");
response.setHeader("Content-Disposition", "attachment; filename=\"dynamic_data.json\"");
// 寫(xiě)入響應(yīng)輸出流
response.getOutputStream().write(jsonContent.getBytes(StandardCharsets.UTF_8));
response.getOutputStream().flush();
}訪(fǎng)問(wèn) http://localhost:8080/api/download-dynamic-json,會(huì)下載一個(gè)包含動(dòng)態(tài)生成內(nèi)容的 JSON 文件。
到此這篇關(guān)于詳解如何使用SpringBoot實(shí)現(xiàn)下載JSON文件的文章就介紹到這了,更多相關(guān)SpringBoot下載JSON內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java圖形驗(yàn)證碼生成工具類(lèi) web頁(yè)面校驗(yàn)驗(yàn)證碼
這篇文章主要為大家詳細(xì)介紹了java圖形驗(yàn)證碼生成工具類(lèi),web頁(yè)面校驗(yàn)驗(yàn)證碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
Java 異步編程實(shí)踐_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
異步編程提供了一個(gè)非阻塞的,事件驅(qū)動(dòng)的編程模型。下面通過(guò)本文給大家介紹Java 異步編程實(shí)踐,感興趣的的朋友一起看看吧2017-05-05
Java編程guava RateLimiter實(shí)例解析
這篇文章主要介紹了Java編程guava RateLimiter實(shí)例解析,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
Java中使用異或運(yùn)算符實(shí)現(xiàn)加密字符串
這篇文章主要介紹了Java中使用異或運(yùn)算符實(shí)現(xiàn)加密字符串,本文直接給出實(shí)現(xiàn)代碼,以及運(yùn)算結(jié)果加密實(shí)例,需要的朋友可以參考下2015-06-06
如何從Java接口的角度切入靜態(tài)工廠(chǎng)模式
靜態(tài)工廠(chǎng)模式是一種改進(jìn)的獲取實(shí)例的方法。通常我們會(huì)使用new關(guān)鍵字調(diào)用類(lèi)的構(gòu)造方法來(lái)創(chuàng)建一個(gè)對(duì)象。靜態(tài)工廠(chǎng)可以根據(jù)用戶(hù)傳入的參數(shù)來(lái)動(dòng)態(tài)地實(shí)例化對(duì)象,避免一次性實(shí)例化所有對(duì)象所帶來(lái)的性能浪費(fèi),同時(shí)也降低了耦合性。2021-06-06
elasticsearch kibana簡(jiǎn)單查詢(xún)講解
今天小編就為大家分享一篇關(guān)于elasticsearch kibana簡(jiǎn)單查詢(xún)講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02
springboot 實(shí)現(xiàn)長(zhǎng)鏈接轉(zhuǎn)短鏈接的示例代碼
短鏈接服務(wù)通過(guò)將長(zhǎng)URL轉(zhuǎn)換成6位短碼,并存儲(chǔ)長(zhǎng)短鏈接對(duì)應(yīng)關(guān)系到數(shù)據(jù)庫(kù)中,用戶(hù)訪(fǎng)問(wèn)短鏈接時(shí),系統(tǒng)通過(guò)查詢(xún)數(shù)據(jù)庫(kù)并重定向到原始URL,實(shí)現(xiàn)快速訪(fǎng)問(wèn),本文就來(lái)介紹一下如何使用,感興趣的可以了解一下2024-09-09
mybatis中@Param注解總是報(bào)取不到參數(shù)問(wèn)題及解決
這篇文章主要介紹了mybatis中@Param注解總是報(bào)取不到參數(shù)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
Mybatis中Mapper標(biāo)簽總結(jié)大全
這篇文章主要介紹了Mybatis中Mapper標(biāo)簽總結(jié)大全,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
SpringBoot實(shí)現(xiàn)發(fā)送郵件功能過(guò)程圖解
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)發(fā)送郵件功能過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03

