Vaadin navegando hacia @RequestMapping.
Estoy creando una aplicación web utilizando Springboot y Vaadin.
He escrito un controlador que implementa un método @RequestMapping. Este método genera un PDF que debería poder ver o descargar en un navegador.
Si accedo directamente al enlace, todo funciona. Sin embargo, cuando uso la navegación de Vaadin, obtengo algunos errores. (Pero cuando actualizo esa página, funciona).
A continuación puedes encontrar mi código:
@RestController
public class PDFController {
@RequestMapping(value = "fichedownload", method = RequestMethod.GET, produces = MediaType.APPLICATION_PDF_VALUE)
public static ResponseEntity<inputstreamresource> ficheReport() throws IOException {
ByteArrayInputStream bis = GeneratePdfReport.ficheReport();
HttpHeaders headers = new HttpHeaders();
// Descarga
//headers.add("Content-Disposition", "attachment; filename=fiche.pdf");
// Ver en el navegador
headers.add("Content-Disposition", "inline; filename=fiche.pdf");
return ResponseEntity
.ok()
.headers(headers)
.contentType(MediaType.APPLICATION_PDF)
.body(new InputStreamResource(bis));
}
}
En alguna vista de Vaadin:
Button generatePDF = new Button();
generatePDF.addClickListener(event->{
UI.getCurrent().navigate(“fichedownload”);
});
El enlace manual a ‘http://localhost:8080/fichedownload’ me da el resultado esperado.
El botón generatePDF navega a ‘http://localhost:8080/fichedownload’, pero muestra un error ‘No se encontró una ruta para ‘fichedownload’.’
¿Debo establecer una ruta o la navegación no ‘activa’ el @RequestMapping?
davy.ai
En Vaadin, al acceder a una URL específica no se activa el método
@RequestMapping
en el controlador. En su lugar, intenta encontrar una vista de Vaadin con una ruta de URL coincidente.Para solucionar el problema, tienes dos opciones:
fichedownload
:En tu clase anotada con
@Route
de Vaadin, agrega el valorfichedownload
a la anotación@Route
:Page
para navegar directamente a la URL:En lugar de utilizar
UI.getCurrent().navigate("fichedownload");
, puedes navegar directamente a la URL utilizandoPage.getCurrent().open("fichedownload", "_self");
. Esto no activará una navegación de vista de Vaadin y abrirá la URL en la ventana/pestaña actual.