angular - 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, "/*");
}
解决方案
您需要检查基本 href 属性。
<base href="/src/main/webapp/">
推荐阅读
- javascript - location.replace 可以随机选择两个可能的 URL 吗?
- asp.net - 在 asp .net core 中实现基于 ROPC 的身份验证
- json - 指定扩展的私钥已存在。重复使用该密钥或先将其删除
- javascript - 使用 vue-router 仅在特定页面上使用动画
- javascript - 如何使用 AsyncStorage 存储和检索多个数据
- laravel - 提交注册表单时出现服务器错误 500
- java - 为什么 session.getAttribute 返回 null?
- getstream-io - 关注汇总提要
- react-native - 远程调试 JS
- docker - 为什么我不能将本地 Docker 映像推送到 Docker Hub 存储库?