Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Spring boot retorno de arquivos

Boa tarde, pessoal.

Criei uma aplicação seguindo os cursos de Spring boot, roda perfeita. Surgiu a seguinte duvida, é possível a aplicação devolver arquivos ? Explicando melhor: Quero fazer uma requisição (ex: localhost:8080/produto/relatorio) e a requisição devolveria um relatório (a lógica de criação do relatório eu já domino com jaspereports) nessa caso seria gerado um arquivo PDF pela aplicação e a duvida seria como devolver esse arquivo para o cliente.

2 respostas
solução!

Olá João, tudo certo?

Então, acredito que com Spring tenha diversas formas, eu fiz um exemplo básico do que eu lembrava

@PostMapping
    public ResponseEntity<?> download(@RequestParam String nomeDoArquivo) {
        // Sanitizar... (biblioteca, nomeDoArquivo.startsWith, regex)
        var filename = String.format("/home/geovaniggr/home/study/%s.pdf", nomeDoArquivo);

        try {
            var file = new File(filename);
            var path = Paths.get(file.getAbsolutePath());
            var resource = new ByteArrayResource(Files.readAllBytes(path));
            return ResponseEntity
                    .ok()
                    .contentType(MediaType.APPLICATION_PDF)
                    .contentLength(file.length())
                    .body(resource);
        } catch (IOException e) {
            e.printStackTrace();
            return ResponseEntity.notFound().build();
        }
    }
`

Mas também é possível utilizar o HttpServletReponse para enviar um fluxo, inclusive encontrei um exemplo no github:

Também é possível fazer um InputStreamResource como neste exemplo que gera um pdf

E aqui um vídeo recente que exemplifica diversos formatos :

Abraços e Bons Estudos!

Show de bola, muito obrigado Geovani.