Estoy tratando de obtener una aplicación Angular2 a través de una aplicación web springboot. He encontrado muchos ejemplos de cómo hacer esto de manera muy simple:
https://github.com/zouabimourad/angular2-spring/tree/master/front
https://github.com/ehirsch/spring-angular2
Sin embargo, estos ejemplos son muy simples y básicamente muestran cómo mostrar contenido estático que resulta ser Angular.
Ninguno de ellos muestra cómo manejar ninguna de las URL (creo que se llaman rutas) que usa la aplicación Angular2 que no se asignan a recursos "reales".
P.ej. Tenemos una ruta "/login" en la aplicación Angular, pero no tenemos un @Controller/@RequestMapping("/login") para esto, quiero que Spring muestre index.html cuando vea una solicitud de "/ acceso".
Genéricamente: quiero que Spring represente "index.html" siempre que no pueda ser un recurso real. ¿Hay alguna manera de establecer una vista predeterminada para todas las solicitudes que no se pueden asignar a algo o encontrar?
He abordado esto antes usando un archivo htaccess y he hecho que apache maneje esto:
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule . index.html [L] ErrorDocument 404 /index.html </IfModule>
Pero no puedo usar apache o nginx en este caso.
Como una ronda de trabajo, agregué las rutas angulares en una anotación de RequestMapping
y las señalé todas en index.html
:
@RequestMapping({"/login", "/logout"}) public String index() { return "index.html"; }
Editar: como una mejor solución alternativa, puede hacer que el controlador implemente ErrorController
, anule el método getErrorPath
, luego agregue una asignación para /error
que actuará como un método general (o falta de asignación).
@Controller public class TheOneController implements ErrorController { @RequestMapping("/error") public String index() { return "index.html"; } @Override public String getErrorPath() { return "index.html"; } }
Ahora el método index
manejará cualquier cosa que no se pueda encontrar y renderizará index.html
.