Peguei um exemplo de como gerar um relatório, como nunca trabalhei com API REST estou tendo muita dificuldade para gerar no meu projeto, consegui fazer gerar em outro projeto com spring mvc, thymeleaf … como posso resolver isso?
I
...
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
@CrossOrigin(origins = "http://localhost:4200")
@RestController
@RequestMapping("/api")
public class CustomerController {
@Autowired
private DataSource dataSource;
@Autowired
CustomerRepository customerRepository;
@PostMapping(value = "/customers/reportCustomer")
public ResponseEntity<String> imprimir(@RequestParam Map<String, Object> parametros, HttpServletResponse response) throws JRException, SQLException, IOException {
parametros = parametros == null ? parametros = new HashMap<>() : parametros;
// Pega o arquivo .jasper localizado em resources
InputStream jasperStream = this.getClass().getResourceAsStream("/report/report_customers_list.jasper");
// Cria o objeto JaperReport com o Stream do arquivo jasper
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperStream);
// Passa para o JasperPrint o relatório, os parâmetros e a fonte dos dados, no caso uma conexão ao banco de dados
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parametros, dataSource.getConnection());
// 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=livros.pdf");
// Faz a exportação do relatório para o HttpServletResponse
final OutputStream outStream = response.getOutputStream();
JasperExportManager.exportReportToPdfStream(jasperPrint, outStream);
return new ResponseEntity<>("Customer has been create!", HttpStatus.OK);
}
@GetMapping("/customers")
public List<Customer> getAllCustomers() {
System.out.println("Get all Customers...");
List<Customer> customers = new ArrayList<>();
customerRepository.findAll().forEach(customers::add);
return customers;
}
@PostMapping(value = "/customers/create")
public Customer postCustomer(@RequestBody Customer customer) {
Customer _customer = customerRepository.save(new Customer(customer.getName(), customer.getAge()));
return _customer;
}
}
Creio que o Erro abaixo seja por causa do parâmetro “response”, porem não sei o que ou como alterar de forma correta.
2018-11-28 17:19:09.460 ERROR 10476 --- [nio-8080-exec-8] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException: null
at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2653) ~[na:1.8.0_162]
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2669) ~[na:1.8.0_162]
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3146) ~[na:1.8.0_162]
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:858) ~[na:1.8.0_162]
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:354) ~[na:1.8.0_162]
at net.sf.jasperreports.engine.util.ContextClassLoaderObjectInputStream.<init>(ContextClassLoaderObjectInputStream.java:57) ~[jasperreports-6.2.0.jar:6.2.0]
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:277) ~[jasperreports-6.2.0.jar:6.2.0]
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:262) ~[jasperreports-6.2.0.jar:6.2.0]
at com.grokonez.jwtauthentication.controller.CustomerController.imprimir(CustomerController.java:62) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_162]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_162]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_162]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_162]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209) ~[spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) ~[spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) ~[spring-webmvc-5.0.9.RELEASE.jar:5.0.9.RELEASE]
at ......
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.34.jar:8.5.34]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) [tomcat-embed-core-8.5.34.jar:8.5.34]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800) [tomcat-embed-core-8.5.34.jar:8.5.34]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.34.jar:8.5.34]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806) [tomcat-embed-core-8.5.34.jar:8.5.34]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498) [tomcat-embed-core-8.5.34.jar:8.5.34]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.34.jar:8.5.34]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_162]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_162]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.34.jar:8.5.34]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_162]