从Spring Web MVC应用程序中排除Angluar2路由

时间:2016-07-20 09:55:35

标签: java spring spring-mvc angular spring-boot

我有一个spring-boot应用程序,它设置了一些视图。我还捆绑了一个Angular2应用程序。当我加载Angular2应用程序时,一切正常,但是,当我尝试深度链接到应用程序中的路径时,Spring MVC正在拦截调用,无法找到关联的视图并返回错误页面。

http://localhost:8080/index.html将加载Angular2应用程序,然后将该URL重新编写为http://localhost:8080/。如果我然后导航到我想要的路线,例如http://localhost:8080/invite/12345,然后路由加载并按预期工作。点击http://localhost:8080/invite/12345直接返回标准的Spring MVC错误页面。

但是,如果我将Angular2应用程序作为独立应用程序运行(不是由spring-boot提供),那么直接点击该链接将按预期工作。它加载index.html,触发路由并显示我想要的数据。

我如何通过Java配置告诉Spring忽略/invite/**路径(以及我的Angular2应用程序增长时的其他路径),这样我就可以深入链接到我的Angular2应用程序中的路由。这是当前的Java配置:

@SpringBootApplication
@EnableResourceServer
public class AuthserverApplication extends WebMvcAutoConfigurationAdapter {

    public static void main(String[] args) {
        SpringApplication.run(AuthserverApplication.class, args);
    }

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/login").setViewName("login");
        registry.addViewController("/oauth/confirm_access").setViewName("authorize");
        registry.addViewController("/success").setViewName("success");
    }

    @Bean
    public ViewResolver getViewResolver() {
        final InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setSuffix(".html");
        return resolver;
    }
}

这个项目继承自spring-boot 1.3.3.RELEASE:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.3.RELEASE</version>
</parent>

2 个答案:

答案 0 :(得分:1)

根据你的回答,我这样配置并且它有效。

@RequestMapping(value = "/*", method = RequestMethod.GET)
@Override
public String index()
{
    return "index";
}

@Override
@RequestMapping(value = "/login/*", method = RequestMethod.GET)
public String login()
{
    return "redirect:/#/login";
}

因此我们可以访问localhost:8080 / angular-app / login /而不会出现404错误。

答案 1 :(得分:0)

所以我最终绕过这个方法是直接链接到index.html页面,这样就迫使angular2应用程序加载,例如:

http://localhost:8080/index.html/#/invite/12345