Java 如何创建json文件,然后在get请求中返回给react应用程序

Java 如何创建json文件,然后在get请求中返回给react应用程序,java,json,reactjs,spring-boot,fetch,Java,Json,Reactjs,Spring Boot,Fetch,我正在尝试创建一个JSON文件sample.JSON,我正在尝试在我的spring boot后端控制器中创建这个文件,并能够将它发送到我的react应用程序,在那里它将触发将文件下载到客户端 我想确保我实际返回的是来自http get请求的响应的实际文件,我想知道如何触发该实际响应的下载 反应 我的最终目标是能够通过get请求在后端生成文件,并能够触发下载。请让我知道这是如何实现的。谢谢。最简单的方法是不要使用fetch,而是使用普通的链接元素: 在所有现代浏览器中,download属性将导

我正在尝试创建一个JSON文件sample.JSON,我正在尝试在我的spring boot后端控制器中创建这个文件,并能够将它发送到我的react应用程序,在那里它将触发将文件下载到客户端

我想确保我实际返回的是来自http get请求的响应的实际文件,我想知道如何触发该实际响应的下载 反应


我的最终目标是能够通过get请求在后端生成文件,并能够触发下载。请让我知道这是如何实现的。谢谢。

最简单的方法是不要使用
fetch
,而是使用普通的链接元素:


在所有现代浏览器中,
download
属性将导致浏览器将链接响应保存为文件。不需要
fetch

但是,如果您确实需要
获取
操作,那么您基本上可以在JS本身中执行此操作:获取结果,然后创建一个
,将其
href
属性设置为文件blob,并确保设置了
下载
属性:

fetch(…)
.then(res=>res.blob())
.然后(blob=>{
const blobURL=URL.createObjectURL(blob);
//创建我们的链接以强制下载响应
const dl=document.createElement(`a`);
dl.href=blobURL;
dl.download=`sample.json`;
//为了使链接“触发”,我们需要将其添加到文档中。
//如果我们不这样做,dl.click()将不会做任何事情。所以添加它,单击它,然后删除它。
dl.style.display=`none`;
document.body.appendChild(dl);
dl.click();
document.body.removeChild(dl);
});

为什么您的
fetch
有一个
then
作为第二个处理程序不返回任何内容
fetch
获取URL内容,第一个
然后
获取生成的网络对象,提取主体并转发该内容。第二个
,然后
得到了这个主体,并且有效地什么也不做。是的,它“做”了一些事情,但是结果被丢弃了,因为(a)你不返回任何东西,(b)在超时时“做”会发生,所以会在完全不同的范围内运行,并且完全独立于承诺链。为什么你的第二个
then
不是
.then(body=>URL.createObjectURL(body))
?@Mike'Pomax'Kamermans可以放弃第二个then函数,那么我的spring代码返回的是一个实际的文件,我怎样才能触发下载我返回的body呢?在回答这个问题之前,你能把你的问题缩小到询问服务器端或客户端代码吗?要么你的端点工作(它向你发送你需要的数据)并且与实际问题无关,要么你的客户端代码工作(我假设这是你遇到问题的部分)并且不应该出现在文章中。尽量保留您的问题。@Mike'Pomax'Kamermans我编辑了这个问题,向您展示了我的客户机代码是什么,以及我是如何试图检索blob的,这是我制作的JSON文件,我希望触发该文件的下载。谢谢。另一方面,为什么设置超时?你已经在异步工作了,那么你认为添加它有什么好处呢?所以你基本上只显示a标签,一旦启动下载的时钟一出现,就立即删除标签,因为它没有显示:无。它只需要在DOM中单击就可以实际工作,一旦单击,就不再需要它了。
fetch('/api/download')
  .then((res) => {
     return res.blob();
  }).then((body) => {
      console.log(body);
      setTimeout(() => {
         URL.createObjectURL(body)
      }, 300);
  }).catch((error) => {
     console.log(error);
  })