Spring Boot / Angular 4 - Маршрутизация в приложении попадает на сервер

У меня есть приложение Angular 4 (ES6), которое я хочу обслуживать из приложения Spring Boot. В моем приложении Angular есть index.html, и когда адрес http://localhost:8080 поражен, Spring Boot знает для сопоставления с файлом index.html, который в Angular сопоставлен с "/ search".

Однако у меня есть другой маршрут под названием "adminlogin", к которому я мог бы получить доступ через

http://localhost:8080/adminLogin

Но в этом случае он попадает в мое приложение Spring Boot, у которого нет сопоставления, а затем выдает ошибку.

Как мне получить мой адрес http://localhost:8080/adminLogin для перехода в мое приложение Angular?


person Black Dynamite    schedule 11.09.2017    source источник


Ответы (2)


У меня была аналогичная проблема с приложениями SpringBoot 2 и Angular6. Я реализовал интерфейс WebMvcConfigurer для переопределения метода addResourceHandlers() и перенаправления на index.html, когда в контроллерах Spring не было обнаружено сопоставлений. это можно сделать в Spring boot 1.5.x, расширяющем (теперь устаревший) класс WebMvcConfigurerAdaptor. это подробно обсуждается в этой ветке stackoverflow: https://stackoverflow.com/a/46854105/2958428 Я положил свой построил приложение angular в этом месте target/classes/static, используя поле outputPath в angular.json (ранее .angular-cli.json). Вот пример кода:

@Configuration
public class MyAppWebMvcConfigurer implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**/*")
            .addResourceLocations("classpath:/static/")
            .resourceChain(true)
            .addResolver(new PathResourceResolver() {
                @Override
                protected Resource getResource(String resourcePath, Resource location) throws IOException {
                    Resource requestedResource = location.createRelative(resourcePath);
                    return requestedResource.exists() && requestedResource.isReadable() ? requestedResource : new ClassPathResource("/static/index.html");
                }
            });
    }
}
person Avdhut Mankavale    schedule 16.07.2018
comment
работают как шарм !!! хороший ответ. - person Ashish; 16.12.2020

Поскольку путь adminlogin не был отображен ни в одном из приложений spring controller Spring, отправьте запрос в /error, следовательно, вы получаете страницу с ошибкой.

Вам нужно направить его обратно в angular, чтобы страница adminlogin была перенаправлена ​​Angular.

Следуя простому маршруту.

@Controller
public class RouteToAngular implements ErrorController {

    @RequestMapping("/error")
    public String handleError() {
        return "/";
    }

    @Override
    public String getErrorPath() {
        return "/error";
    }
}

Примечание: не забудьте реализовать страницу 404 в Angular.

Надеюсь, это поможет.

person Arun Prakash    schedule 25.01.2019