如何使用GSON从Primeface应用下载json文件?

时间:2018-07-19 08:20:09

标签: java json primefaces download gson

我需要从应用程序中下载文件.json,但要选择其位置。

  • 我知道如何将文件下载到磁盘,例如映像<p:fileDownload value=""/>

    public StreamedContent getFile(){
        return new DefaultStreamedContent(stream, "image/jpg", "img.jpg"); 
    }
    
  • 我知道如何使用具有给定路径的GSON写入文件

    try(JsonWrite j = new JsonWriter(new OutputStreamWriter(
                              new FileOutputStream("C:\\...\\...\\file.json"), "UTF-8"))){
       j.beginObject();
       // ...
       j.name("foo");
       gson.toJson(myObj, Foo.class, j);
       //...
       j.endObject();
    }catch(...){...}
    

但是我不知道如何结合两者才能选择位置并在该位置写入json?

1 个答案:

答案 0 :(得分:1)

所以我不认为你可以做你想做的。您所能做的就是流式传输JSON文件并为其命名,例如“ test.json”。出于安全原因,不允许您告诉浏览器您要用户下载的位置。我相信它类似于以下请求:Browsing file system to select directory in JSF

但是,如果您只想发送GSON文件以允许用户下载它。

XHTML:

<p:fileDownload value="#{myController.downloadFile()}" />

JAVA:

public StreamedContent downloadFile() {
      // convert GSON object to InputStream
      String gson= json.getJSONObject("data").toString();
      InputStream stream = new ByteArrayInputStream(gson.getBytes());

      DefaultStreamedContent  content = new DefaultStreamedContent(stream,
                  MediaType.APPLICATION_JSON,
                  "test.json");

      return content;
   }