Aplicação Spring Boot para geração de relatórios dinâmicos em PDF com JasperReports.
- geração de relatórios em PDF a partir de template Jasper JRXML;
- escolha da fonte de dados em tempo de execução:
- coleção JSON enviada no corpo da requisição;
- conexão JDBC informada pela aplicação cliente;
- autenticação de aplicações REST por token Bearer;
- endpoint para descoberta de templates padrão do projeto.
- Solicite um token em
POST /api/auth/token. - Use o valor retornado em
Authorization: Bearer <token>. - Chame os endpoints protegidos em
/api/**.
Credenciais padrão de demonstração:
clientId:report-clientclientSecret:report-secret
curl -X POST http://localhost:8080/api/auth/token -H 'Content-Type: application/json' -d '{
"clientId": "report-client",
"clientSecret": "report-secret"
}'curl -X POST http://localhost:8080/api/reporting/render -H 'Authorization: Bearer reports-api-token-123' -H 'Content-Type: application/json' --output relatorio.pdf -d '{
"reportName": "resumo-executivo",
"template": {
"sourceType": "CLASSPATH",
"value": "reports/templates/executive-summary.jrxml"
},
"parameters": {
"REPORT_TITLE": "Resumo executivo",
"SUMMARY_TEXT": "Indicadores enviados pela API cliente"
},
"data": [
{"label": "Pedidos processados", "value": "1520"},
{"label": "Receita total", "value": "R$ 81.340,00"},
{"label": "Tempo médio", "value": "02:14 min"}
]
}'O template reports/templates/dynamic-list.jrxml usa o parâmetro Jasper REPORT_SQL. Assim a aplicação cliente pode escolher o banco, a consulta e o modelo.
curl -X POST http://localhost:8080/api/reporting/render -H 'Authorization: Bearer reports-api-token-123' -H 'Content-Type: application/json' --output indicadores.pdf -d '{
"reportName": "indicadores-jdbc",
"template": {
"sourceType": "CLASSPATH",
"value": "reports/templates/dynamic-list.jrxml"
},
"dataSource": {
"jdbcUrl": "jdbc:h2:mem:testdb;MODE=PostgreSQL;DB_CLOSE_DELAY=-1",
"username": "sa",
"password": "",
"driverClassName": "org.h2.Driver"
},
"parameters": {
"REPORT_TITLE": "Indicadores do banco",
"REPORT_SQL": "select ''Faturamento'' as label, ''100000'' as value union all select ''Clientes'', ''450''"
}
}'Os templates padrão ficam em src/main/resources/reports/templates.
Você pode:
- reutilizar um template do classpath;
- enviar um JRXML inline no campo
template.valuecomsourceType=INLINE.
./mvnw spring-boot:runO perfil dev continua configurado com H2 para facilitar testes locais. Ajuste application-dev.properties ou envie uma conexão JDBC própria na requisição quando quiser consultar outra base.