首页 > 解决方案 > Spring 5 MVC Angular 5 App 抛出 404 错误

问题描述

我知道之前有人问过这个问题,我尝试了几种解决方案,但无法正常工作。我正在使用 Spring 5 MVC 和 /src/main/webapp/ 中存在的 Angular 应用程序。

该应用程序在访问基本路径时工作。当我需要跳转到应用程序中的路线时,问题就出现了。当页面尝试使用 URL 中的路由加载时,它会引发 404 错误,因为 Spring 找不到为此的资源处理程序,但实际上我想要它做的只是转到应用程序的 index.html 如此有角度可以处理。我试图将应用程序移动到 /src/main/webapp/ 中的“应用程序”文件夹中,您可以在下面看到资源处理程序和视图控制器。我在这个应用程序中使用 swagger,这也让事情变得复杂。任何帮助,将不胜感激!

public class MvcConfiguration implements WebMvcConfigurer {...

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
    registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");   
    registry.addResourceHandler("/app/**").addResourceLocations("/app/");
}

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addRedirectViewController("/", "swagger-ui.html");
    registry.addViewController("/swagger").setViewName("redirect:/rest/swagger-ui.html");
    registry.addViewController("/app").setViewName("forward:/app/index.html");
}

以及下面的网络初始化类:

public class WebInitializer implements WebApplicationInitializer {

AnnotationConfigWebApplicationContext webApplicationContext = new AnnotationConfigWebApplicationContext();

@Override
public void onStartup(ServletContext container) {
    // Create the 'root' Spring application context
    AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
    rootContext.register(ApplicationConfiguration.class);

    // Manage the lifecycle of the root application context
    container.addListener(new ContextLoaderListener(rootContext));

    registerDispatcherServlet(container, MvcConfiguration.class, "/views/*", "/rest/*", "/swagger/*");

    container.addFilter("springSecurityFilterChain", new DelegatingFilterProxy("springSecurityFilterChain")).addMappingForUrlPatterns(null, false, "/*");

    CharacterEncodingFilter charEncodingFilter = new CharacterEncodingFilter();
    charEncodingFilter.setEncoding("UTF-8");
    container.addFilter("encoding-filter", charEncodingFilter).addMappingForUrlPatterns(null, false, "/*");

    container.addFilter("cors-filter", new CorsFilter()).addMappingForUrlPatterns(null, false, "/*");
}

标签: angularspring-mvc

解决方案


您需要检查基本 href 属性。

<base href="/src/main/webapp/">

推荐阅读