詳解如何使用SpringBoot實(shí)現(xiàn)下載JSON文件
概述
在 Spring Boot 中實(shí)現(xiàn)文件下載功能,可以通過將 JSON 字符串作為文件內(nèi)容返回給客戶端。以下是實(shí)現(xiàn)步驟和代碼示例:
實(shí)現(xiàn)步驟
定義接口:創(chuàng)建一個 REST 控制器,用于處理文件下載請求。
設(shè)置響應(yīng)頭:通過 HttpServletResponse 設(shè)置響應(yīng)頭,指定文件類型和下載文件名。
返回文件內(nèi)容:將 JSON 字符串寫入響應(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"); // 文件類型為 JSON
response.setHeader("Content-Disposition", "attachment; filename=\"data.json\""); // 設(shè)置下載文件名
// 3. 將 JSON 字符串寫入響應(yīng)輸出流
response.getOutputStream().write(jsonContent.getBytes(StandardCharsets.UTF_8));
response.getOutputStream().flush();
}
}2. 運(yùn)行并測試
啟動 Spring Boot 應(yīng)用。
在瀏覽器中訪問接口地址,例如:http://localhost:8080/api/download-json。
瀏覽器會自動下載一個名為 data.json 的文件,文件內(nèi)容為:
{"name":"John", "age":30, "city":"New York"}
關(guān)鍵點(diǎn)說明
1.HttpServletResponse:
- 用于設(shè)置響應(yīng)頭和輸出流。
- setContentType("application/json"):指定文件類型為 JSON。
- setHeader("Content-Disposition", "attachment; filename=\"data.json\""):指定文件名為 data.json,并告訴瀏覽器以附件形式下載。
2.文件內(nèi)容寫入:
- 使用 response.getOutputStream().write() 將 JSON 字符串寫入響應(yīng)輸出流。
- 確保使用 StandardCharsets.UTF_8 指定字符編碼,避免亂碼問題。
3.文件名:
可以根據(jù)需要動態(tài)生成文件名,例如:
String fileName = "data_" + System.currentTimeMillis() + ".json";
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
擴(kuò)展功能
動態(tài)生成 JSON 內(nèi)容:可以從數(shù)據(jù)庫或其他服務(wù)中獲取數(shù)據(jù),動態(tài)生成 JSON 字符串。
壓縮文件下載:如果需要下載壓縮文件(如 .zip),可以使用 ZipOutputStream 將多個文件打包后返回。
大文件下載:對于大文件,可以使用分塊傳輸(Transfer-Encoding: chunked)來優(yōu)化性能。
示例:動態(tài)生成 JSON 內(nèi)容
@GetMapping("/download-dynamic-json")
public void downloadDynamicJsonFile(HttpServletResponse response) throws IOException {
// 動態(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\"");
// 寫入響應(yīng)輸出流
response.getOutputStream().write(jsonContent.getBytes(StandardCharsets.UTF_8));
response.getOutputStream().flush();
}訪問 http://localhost:8080/api/download-dynamic-json,會下載一個包含動態(tài)生成內(nèi)容的 JSON 文件。
到此這篇關(guān)于詳解如何使用SpringBoot實(shí)現(xiàn)下載JSON文件的文章就介紹到這了,更多相關(guān)SpringBoot下載JSON內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java圖形驗(yàn)證碼生成工具類 web頁面校驗(yàn)驗(yàn)證碼
這篇文章主要為大家詳細(xì)介紹了java圖形驗(yàn)證碼生成工具類,web頁面校驗(yàn)驗(yàn)證碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
Java 異步編程實(shí)踐_動力節(jié)點(diǎn)Java學(xué)院整理
異步編程提供了一個非阻塞的,事件驅(qū)動的編程模型。下面通過本文給大家介紹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
springboot 實(shí)現(xiàn)長鏈接轉(zhuǎn)短鏈接的示例代碼
短鏈接服務(wù)通過將長URL轉(zhuǎn)換成6位短碼,并存儲長短鏈接對應(yīng)關(guān)系到數(shù)據(jù)庫中,用戶訪問短鏈接時(shí),系統(tǒng)通過查詢數(shù)據(jù)庫并重定向到原始URL,實(shí)現(xiàn)快速訪問,本文就來介紹一下如何使用,感興趣的可以了解一下2024-09-09
mybatis中@Param注解總是報(bào)取不到參數(shù)問題及解決
這篇文章主要介紹了mybatis中@Param注解總是報(bào)取不到參數(shù)問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
Mybatis中Mapper標(biāo)簽總結(jié)大全
這篇文章主要介紹了Mybatis中Mapper標(biāo)簽總結(jié)大全,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
SpringBoot實(shí)現(xiàn)發(fā)送郵件功能過程圖解
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)發(fā)送郵件功能過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03

