У меня есть 2 приложения Spring Boot, одно действует как поставщик данных, а одно - просто оболочка для моего приложения Angular 6, чтобы его можно было развернуть на сервере с java -jar JAR_NAME.
Работая над своим приложением Angular с помощью angular-cli и запуская его с ng serve, я вижу первую страницу на http://localhost:4200, которая перенаправляет меня на localhost: 4200 / index. У меня есть другой компонент, сопоставленный с / comp, и при доступе к localhost: 4200 / comp этот новый компонент отображается на странице.
Проблема возникает, когда я развертываю свое приложение, завернутое в spring jar, и пытаюсь напрямую получить доступ к маршрутам из Angular. Мое весеннее приложение обслуживается по адресу localhost: 8999, и при его нажатии я перенаправляюсь на localhost: 8999 / index, и страница загружается нормально. Если нажать кнопку, которая перенаправляет меня на страницу comp, URL-адрес меняется на localhost: 8999 / comp, и ресурсы обслуживаются правильно. Проблема в том, что если я обращаюсь к localhost: 8999 / index или localhost: 8999 / comp, я получаю ошибку 404.
Соответствующие фрагменты кода:
From application.yml:
zuul:
ignoredServices: '*'
routes:
g-api:
path: /loc/**
url: http://localhost:8443/api
Из app-routing.module.ts:
const routes: Routes = [
{path: '', redirectTo: '/index', pathMatch: 'full'},
{path: 'index', component: FirstComp},
{path: 'comp', component: SecondComp}}
Из навигационной панели html:
<li class = "n">
<a class = "na"
[routerLink] = "['/comp']" >
<i class = "a"></i>
<p>comp</p>
</a>
</li>
Отметим, что прокси-сервер zuul работает даже при развертывании с помощью Spring, поэтому я могу получать данные из API, развернутого на другом порту. Но если я обновляю или получаю доступ к некоторому компоненту Angular через URL-адрес, я получаю 404.
PS: здесь не фронтенд-разработчик.




Как я это исправил:
@Configuration
public class WebApplicationConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/notFound").setViewName("forward:/index.html");
}
@Bean
public WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> containerCustomizer() {
return container -> {
container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND,
"/notFound"));
};
}
}
Из Spring настройте все не найденные файлы для перехода к /notFound, затем добавьте ViewController, который служит переадресацией для вашего index.html. Это для весенней загрузки 2