17

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

但是,我有另一条名为“adminlogin”的路线,我可以通过它访问

http://localhost:8080/admin登录

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

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

4

2 回答 2

24

我的 SpringBoot 2 和 Angular6 应用程序也有类似的问题。我实现了WebMvcConfigurer接口来覆盖addResourceHandlers()方法并重定向到index.html在 spring 控制器中找不到映射时。这可以在 Spring boot 1.5.x 扩展(现已弃用)WebMvcConfigurerAdaptor类中完成。这在此 stackoverflow 线程中进行了详细讨论:httpstarget/classes/static ://stackoverflow.com/a/46854105/2958428 我使用(以前)中的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");
                }
            });
    }
}
于 2018-07-16T17:57:29.487 回答
7

由于路径adminlogin未在任何 spring controllerspring 应用程序中映射请求/error,因此您将收到错误页面。

您需要将其路由回 angular,以便adminlogin页面将通过Angular.

按照简单的路线这样做。

@Controller
public class RouteToAngular implements ErrorController {

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

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

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

我希望这会有所帮助。

于 2019-01-25T10:28:18.883 回答