Java Spring Boot/Angular 4-应用程序中的路由命中服务器
我有一个Angular 4(ES6)应用程序,我想从Spring Boot应用程序提供服务。我的Angular应用程序有一个index.html,当命中的地址时,Spring Boot知道映射到index.html文件,在Angular中,该文件映射到“/search” 然而,我有另一个叫做“adminlogin”的路由,我可以通过它访问 但在这个例子中,它击中了我的Spring引导应用程序,它没有映射,然后抛出一个错误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应用程序的地址?我的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页面
我希望这会有所帮助。可以在本文中找到解决方案。像魅力一样工作!!!回答得好。