Zwracanie pliku w springu

0

Hej

Mam taki kod, który generuje JSON z różnymi danymi i potem pozwala go pobrać przez API

Service:

public File getJsonFile() {
    // utworzenie pewnego JSON'a

    File jsonFile = new File("file.json");

    try (FileWriter fileWriter = new FileWriter(jsonFile)) {
        fileWriter.write(objectMapper.writeValueAsString(json));   // objectMapper z Jackson
    } catch (IOException e) {
        throw new RuntimeException(e);
    }

    return jsonFile;
}

Controller:

@GetMapping
ResponseEntity<Resource> getJsonFile() throws FileNotFoundException {
    File file = service.getJsonFile();
    String header = String.format("attachment; filename=%s", file.getName());

    return ResponseEntity.ok()
        .header(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, HttpHeaders.CONTENT_DISPOSITION)
        .header(HttpHeaders.CONTENT_DISPOSITION, header)
        .contentLength(file.length())
        .contentType(MediaType.APPLICATION_JSON)
        .body(new InputStreamResource(new FileInputStream(file)));
}

Czy taki kod jest wydajny? Jak zrobić, żeby nie tworzyło mi pliku przy pobieraniu jsona?

0

https://stackoverflow.com/questions/8597646/java-servlet-and-io-create-a-file-without-saving-to-disk-and-sending-it-to-the

Czy jest wydajny? Nie wiem ale to imho najmniejszy potencjalny problem tego kodu.

1

Działaj raczej na Inputstream lub byte[], a nie na File.

0

Jak się nie wie, że można pracować na "plikach" w pamięci jako tablice bajtów to potem powstają takie cuda. Sam to przerabiałem. Mocno się zdziwiłem jak odkryłem, że można pobrać plik z neta i obrobić go w locie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1