Dúvida com relatório JasperReport e Spring Boot + Thymeleaf [RESOLVIDO]

Olá, quero gerar o relatório de alunos (uso BD mysql) JasperReports ao clicar em um botão, porem estou encontrando dificuldades pois é a primeira vez que faço.
Peguei um tutorial na internet e não obtive sucesso.

Clico no botão e não acontece nada.

> Segue Controller

@Autowired
public Alunos alunos;

@GetMapping("/alunosCadastrados")
public ModelAndView relatorioAlunosCadastrados() {
    ModelAndView mv = new ModelAndView("relatorio/alunosCadastrados");
    mv.addObject(new RelatorioAlunosResumidoDTO());
    return mv;
}

@RequestMapping(value = "gerarRelatorio", method= RequestMethod.GET)
public void  gerarRelatorio(HttpServletResponse response) throws Exception {
    response.setContentType("text/html");
    List<Aluno> alunosList = alunos.findAll();
    
    JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(alunosList);
    
    InputStream jrxmlInput = this.getClass().getResourceAsStream("/relatorios/alunosCadastradosResumido.jrxml");
    JasperDesign design = JRXmlLoader.load(jrxmlInput);
    JasperReport jasperReport = JasperCompileManager.compileReport(design);
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,null, dataSource);
    
    JRPdfExporter pdfExporter = new JRPdfExporter();
    pdfExporter.setExporterInput(new SimpleExporterInput(jasperPrint));
    ByteArrayOutputStream pdfReportStream = new ByteArrayOutputStream();
    pdfExporter.setExporterOutput(new SimpleOutputStreamExporterOutput(pdfReportStream));
    pdfExporter.exportReport();
    
    // Configura a respota para o tipo PDF
    response.setContentType("application/pdf");
    // Define que o arquivo pode ser visualizado no navegador e também nome final do arquivo
    // para fazer download do relatório troque 'inline' por 'attachment'
    response.setHeader("Content-Disposition", "inline; filename=relatorioalunoscadastrados.pdf");   
    
 // Faz a exportação do relatório para o HttpServletResponse
    OutputStream responseOutStream = response.getOutputStream();
    responseOutStream.write(pdfReportStream.toByteArray());
    responseOutStream.close();
    pdfReportStream.close();
    
}

VIEW

        <div class="page-header" style="margin-top: -30px;">
          <h3 class="page-title"> Relatório de Alunos Cadastrados </h3>
          <nav aria-label="breadcrumb">
            <ol class="breadcrumb">
              <li class="breadcrumb-item"><a href="/alunos/new">Cadastrar Aluno</a></li>
              <li class="breadcrumb-item active" aria-current="page">Listar</li>
            </ol>
          </nav>
        </div>
  
           <div class="card">
             <div class="card-body">                          
				  
				  <button type="submit" class="btn btn-success mb-2"  th:href="@{${page.Context.request.contextPath}/gerarRelatorio}" name="action">
				  		<i class="mdi mdi-send icon-md"></i> Emitir
				   </button>


               <br/>
            </div>    
          </div>
 </section>

Dá algum erro?

Olá ,
ravesync obrigada, mas consegui resolver hj, retirei o RequestMethod.GET e retirei o href do button e adicionei um form com método POST e funcionou tranquilo.

Justamente o que ia dizer. Fiz um ontem.

1 curtida