详解如何使用SpringBoot实现下载JSON文件

 更新时间:2025年02月12日 10:38:00   作者:小信丶  
在 Spring Boot 中实现文件下载功能,可以通过将 JSON 字符串作为文件内容返回给客户端从而实现JSON文件下载效果,下面我们就来看看具体操作吧

概述

在 Spring Boot 中实现文件下载功能,可以通过将 JSON 字符串作为文件内容返回给客户端。以下是实现步骤和代码示例:

实现步骤

定义接口:创建一个 REST 控制器,用于处理文件下载请求。

设置响应头:通过 HttpServletResponse 设置响应头,指定文件类型和下载文件名。

返回文件内容:将 JSON 字符串写入响应输出流。

代码实现

1. 创建 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. 准备 JSON 字符串
        String jsonContent = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";
 
        // 2. 设置响应头
        response.setContentType("application/json"); // 文件类型为 JSON
        response.setHeader("Content-Disposition", "attachment; filename=\"data.json\""); // 设置下载文件名
 
        // 3. 将 JSON 字符串写入响应输出流
        response.getOutputStream().write(jsonContent.getBytes(StandardCharsets.UTF_8));
        response.getOutputStream().flush();
    }
}

2. 运行并测试

启动 Spring Boot 应用。

在浏览器中访问接口地址,例如:http://localhost:8080/api/download-json。

浏览器会自动下载一个名为 data.json 的文件,文件内容为:

{"name":"John", "age":30, "city":"New York"}

关键点说明

1.HttpServletResponse:

  • 用于设置响应头和输出流。
  • setContentType("application/json"):指定文件类型为 JSON。
  • setHeader("Content-Disposition", "attachment; filename=\"data.json\""):指定文件名为 data.json,并告诉浏览器以附件形式下载。

2.文件内容写入:

  • 使用 response.getOutputStream().write() 将 JSON 字符串写入响应输出流。
  • 确保使用 StandardCharsets.UTF_8 指定字符编码,避免乱码问题。

3.文件名:

可以根据需要动态生成文件名,例如:

String fileName = "data_" + System.currentTimeMillis() + ".json";
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");

扩展功能

动态生成 JSON 内容:可以从数据库或其他服务中获取数据,动态生成 JSON 字符串。

压缩文件下载:如果需要下载压缩文件(如 .zip),可以使用 ZipOutputStream 将多个文件打包后返回。

大文件下载:对于大文件,可以使用分块传输(Transfer-Encoding: chunked)来优化性能。

示例:动态生成 JSON 内容

@GetMapping("/download-dynamic-json")
public void downloadDynamicJsonFile(HttpServletResponse response) throws IOException {
    // 动态生成 JSON 数据
    Map<String, Object> data = new HashMap<>();
    data.put("timestamp", System.currentTimeMillis());
    data.put("message", "Hello, this is a dynamic JSON file!");
 
    // 将 Map 转换为 JSON 字符串
    String jsonContent = new ObjectMapper().writeValueAsString(data);
 
    // 设置响应头
    response.setContentType("application/json");
    response.setHeader("Content-Disposition", "attachment; filename=\"dynamic_data.json\"");
 
    // 写入响应输出流
    response.getOutputStream().write(jsonContent.getBytes(StandardCharsets.UTF_8));
    response.getOutputStream().flush();
}

访问 http://localhost:8080/api/download-dynamic-json,会下载一个包含动态生成内容的 JSON 文件。

到此这篇关于详解如何使用SpringBoot实现下载JSON文件的文章就介绍到这了,更多相关SpringBoot下载JSON内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java源码刨析之ArrayQueue

    Java源码刨析之ArrayQueue

    在本篇文章当中主要给大家介绍一个比较简单的JDK为我们提供的容器ArrayQueue,这个容器主要是用数组实现的一个单向队列,整体的结构相对其他容器来说就比较简单了
    2022-07-07
  • Java中xxl-job实现分片广播任务的示例

    Java中xxl-job实现分片广播任务的示例

    本文主要介绍了Java中xxl-job实现分片广播任务的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • java+mysql模拟实现银行系统

    java+mysql模拟实现银行系统

    这篇文章主要为大家详细介绍了java+mysql模拟实现银行系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • Java(SpringBoot)项目打包(构建)成Docker镜像的几种常见方式

    Java(SpringBoot)项目打包(构建)成Docker镜像的几种常见方式

    在对Spring Boot应用程序进行Docker化时,为应用程序选择正确的基础镜像非常重要,下面这篇文章主要给大家介绍了关于Java(SpringBoot)项目打包(构建)成Docker镜像的几种常见方式,需要的朋友可以参考下
    2023-12-12
  • @RunWith(SpringJUnit4ClassRunner.class)报错问题及解决

    @RunWith(SpringJUnit4ClassRunner.class)报错问题及解决

    这篇文章主要介绍了@RunWith(SpringJUnit4ClassRunner.class)报错问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 关于SpringBoot获取IOC容器中注入的Bean(推荐)

    关于SpringBoot获取IOC容器中注入的Bean(推荐)

    本文通过实例代码给大家详解了springboot获取ioc容器中注入的bean问题,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-05-05
  • 深入分析JAVA Vector和Stack的具体用法

    深入分析JAVA Vector和Stack的具体用法

    这篇文章主要介绍了深入分析JAVA Vector和Stack的具体用法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Spring Boot 简介(入门篇)

    Spring Boot 简介(入门篇)

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。下面通过本文给大家介绍spring boot相关知识,需要的的朋友参考下吧
    2017-04-04
  • 微信公众平台开发实战Java版之微信获取用户基本信息

    微信公众平台开发实战Java版之微信获取用户基本信息

    这篇文章主要介绍了微信公众平台开发实战Java版之微信获取用户基本信息 的相关资料,需要的朋友可以参考下
    2015-12-12
  • 基于SpringBoot实现自动装配返回属性的设计思路

    基于SpringBoot实现自动装配返回属性的设计思路

    这篇文章主要介绍了基于SpringBoot实现自动装配返回属性,这里涉及到的技术知识点有注解解析器,为什么用ResponseBodyAdvice这里解析?不在Filter,Interceptors,本文结合示例代码给大家介绍的非常详细,需要的朋友参考下吧
    2022-03-03

最新评论