Spring Boot/Angular 4 - 应用程序中的路由命中服务器

我有一个Angular 4(ES6)应用程序,我想从Spring Boot应用程序提供。我的Angular应用程序有一个索引.html,当 http://localhost:8080 的地址被击中时,Spring Boot知道映射到索引.html文件,该文件在Angular中映射到“/search”。

但是,我有另一个名为“adminlogin”的路由,我将通过它访问

http://localhost:8080/adminLogin

但是在这种情况下,它击中了我的Spring Boot应用程序,该应用程序没有映射,然后会引发错误。

如何获取我的 http://localhost:8080/adminLogin 地址以转到我的 Angular 应用程序?


答案 1

我的SpringBoot 2和Angular6应用程序也遇到了类似的问题。我实现了该接口来覆盖方法并重定向到弹簧控制器中找不到映射时。这可以在 Spring boot 1.5.x 中完成,扩展(现已弃用)类。此堆栈溢出线程中对此进行了详细讨论:https://stackoverflow.com/a/46854105/2958428,我使用 (之前) 中的字段将我构建的角度应用放在此位置。下面是示例代码:WebMvcConfigureraddResourceHandlers()index.htmlWebMvcConfigurerAdaptortarget/classes/staticoutputPathangular.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");
                }
            });
    }
}

答案 2

由于路径未在任何弹簧应用程序中映射,因此将请求调度到 ,因此您会收到错误页面。adminlogincontroller/error

您需要将其路由回角度,以便页面将由 路由。adminloginAngular

按照简单的路线这样做。

@Controller
public class RouteToAngular implements ErrorController {

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

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

注意:不要忘记在Angular中实现404页面。

我希望这将有所帮助。