2017-05-30 60 views
0

我在Spring Boot中編寫代碼,我想將響應下載爲不應在任何項目目錄中創建的.json文件(Json文件),但它應該在飛行中從Java對象創建如何將響應作爲從Java對象創建的JSON文件下載

@RequestMapping(value = "/", method = RequestMethod.GET,produces = "application/json") 
public ResponseEntity<InputStreamResource> downloadPDFFile() 
     throws IOException { 


    User user = new User(); 

    user.setName("Nilendu"); 
    user.setDesignation("Software Engineer"); 
    createJsonFile(user); 

    ClassPathResource jsonFile = new ClassPathResource("a.json"); 

    HttpHeaders headers = new HttpHeaders(); 
    headers.add("Cache-Control", "no-cache, no-store, must-revalidate"); 
    headers.add("Pragma", "no-cache"); 
    headers.add("Expires", "0"); 

    return ResponseEntity 
      .ok() 
      .contentLength(jsonFile.contentLength()) 
      .contentType(
        MediaType.parseMediaType("application/octet-stream")) 
      .body(new InputStreamResource(jsonFile.getInputStream())); 
} 

void createJsonFile(User user) { 

    ObjectMapper mapper = new ObjectMapper(); 
    try { 

     // Convert object to JSON string and save into a file directly 
     File file = new File("src/main/resources/a.json"); 
     System.out.println(file.exists()+" ++++"); 
     mapper.writeValue(file, user); 
     System.out.println("File Created"); 
    } catch (JsonGenerationException e) { 
     e.printStackTrace(); 
    } catch (JsonMappingException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 


} 

}

我能夠用上面的代碼,但我每次做的時間要求其在SRC創建一個新文件a.json做到這一點/主/資源目錄我不想要的。我不想在任何directoy中創建此文件,但我仍然應該能夠下載文件

+0

Nilendu,如果你得到一個可用的答案,接受答案是很好的方式。請仔細閱讀[當某人回答我的問題時該怎麼辦?](https://stackoverflow.com/help/someone-answers)。我知道你現在還不能在答案上投票,但接受你發佈的問題的答案只是對你的支持。所以請考慮... –

回答

0

然後不要將它寫入文件!

byte[] buf = mapper.writeValueAsBytes(user); 

return ResponseEntity 
     .ok() 
     .contentLength(buf.length) 
     .contentType(
       MediaType.parseMediaType("application/octet-stream")) 
     .body(new InputStreamResource(new ByteArrayInputStream(buf))); 

編輯

以提示瀏覽器.json文件類型添加頁眉

.header("Content-Disposition", "attachment; filename=\"any_name.json\"") 
+0

謝謝,它的工作。我仍然有一個問題,下載的文件格式顯示文件類型,但該文件內存在的數據是JSON格式。如何在下載時將文件製作爲.json類型文件 –

+0

您的意思是您希望瀏覽器中的「保存類型」下拉菜單中顯示「json」?如果是這樣,您可以添加一個Content-Disposition標題並提供一個帶有.json後綴的文件名。然後直到瀏覽器默認保存類型下拉菜單爲'.json'。 – TedTrippin

+0

另一件事是,你用'application/json'註釋了你的方法,但是你正在設置你對'application/octet-stream'的響應。你可能想讓它們一樣。 – TedTrippin

-1

你不需要創建一個文件,只是用GSON將對象轉換爲JSON,

Gson gson = new Gson(); 
String jsonString = gson.toJson (user);