将对象导出成为json文件

将对象导出成为json文件

  • 前言
    • 需求:将复杂对象导出为一个json文件,在将json文件导入,生成对应的数据。 用于不同环境下的数据迁移,本文主要记录前半部分(将对象导出为json文件)
  • 一、一个controller解决
  • 二、导出文件名
  • 总结


前言

需求:将复杂对象导出为一个json文件,在将json文件导入,生成对应的数据。
用于不同环境下的数据迁移,本文主要记录前半部分(将对象导出为json文件)

一、一个controller解决


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.ByteArrayInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping(value = "json/file")
public class JsonFileController {

    @GetMapping(value = "download")
    public void downLoad(HttpServletResponse response) {
        response.setContentType("text/plain");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-Disposition", "attachment;fileName=demo.json");

        // 制造假数据,模拟JSON数据
        List<Person> list = new ArrayList<>();
        list.add(new Person(1L, "张三", 18));
        list.add(new Person(2L, "李四", 20));
        list.add(new Person(3L, "王五", 26));

        ByteArrayInputStream is = null;
        OutputStream os = null;
        try {
            // 对象转换为字符串
//            String s = JSON.toJSONString(list);
            String s = "{\"code\":0,\"data\":\"aaaaaa\",\"msg\":\"成功\"}";
            System.out.println(s);

            is = new ByteArrayInputStream(s.getBytes());
            os = response.getOutputStream();

            byte[] buffer = new byte[1024];
            int len;
            while ((len = is.read(buffer)) != -1) {
                os.write(buffer, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

二、导出文件名

详见:fileName=demo.json

        response.setHeader("Content-Disposition", "attachment;fileName=demo.json");

总结

在postman中,会直接得到json文件内容
将对象导出成为json文件_第1张图片

在浏览器上时,会直接得到一个文件

将对象导出成为json文件_第2张图片

你可能感兴趣的:(json,java,servlet)