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

Java Spring Boot/Angular 4-应用程序中的路由命中服务器,java,angular,spring-boot,routing,angular4-router,Java,Angular,Spring Boot,Routing,Angular4 Router,我有一个Angular 4(ES6)应用程序,我想从Spring Boot应用程序提供服务。我的Angular应用程序有一个index.html,当命中的地址时,Spring Boot知道映射到index.html文件,在Angular中,该文件映射到“/search” 然而,我有另一个叫做“adminlogin”的路由,我可以通过它访问 但在这个例子中,它击中了我的Spring引导应用程序,它没有映射,然后抛出一个错误 如何获取我的Angular应用程序的地址?我的SpringBoot 2和

我有一个Angular 4(ES6)应用程序,我想从Spring Boot应用程序提供服务。我的Angular应用程序有一个index.html,当命中的地址时,Spring Boot知道映射到index.html文件,在Angular中,该文件映射到“/search”

然而,我有另一个叫做“adminlogin”的路由,我可以通过它访问

但在这个例子中,它击中了我的Spring引导应用程序,它没有映射,然后抛出一个错误


如何获取我的Angular应用程序的地址?

我的SpringBoot 2和Angular6应用程序也有类似问题。我实现了
webmvcconfiguer
接口,在spring控制器中找不到映射时重写
addResourceHandlers()
方法并重定向到
index.html
。这可以在Spring boot 1.5.x中完成,扩展(现在已弃用)WebMVCConfigureAdaptor类。这将在stackoverflow线程中详细讨论: 我使用
angular.json
中的
outputPath
字段将我构建的angular应用程序放在这个位置
target/classes/static
(以前的
.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");
                }
            });
    }
}

由于路径
adminlogin
未映射到任何spring
控制器
spring应用程序中,因此将请求分派到
/error
,因此您将获得错误页面

您需要将其路由回angular,以便
adminlogin
页面将由
angular
路由

按照简单的方法进行操作

@Controller
public class RouteToAngular implements ErrorController {

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

    @Override
    public String getErrorPath() {
        return "/error";
    }
}
注意:不要忘记在Angular中实现404页面


我希望这会有所帮助。

可以在本文中找到解决方案。像魅力一样工作!!!回答得好。