【问题标题】:Spring Boot/Angular 4 - Routing in app hits the serverSpring Boot/Angular 4 - 应用程序中的路由命中服务器
【发布时间】:2018-02-19 06:58:27
【问题描述】:
【问题讨论】:
标签:
java
angular
spring-boot
routing
angular4-router
【解决方案1】:
我的 SpringBoot 2 和 Angular6 应用程序也遇到了类似的问题。我实现了WebMvcConfigurer 接口来覆盖addResourceHandlers() 方法并在spring 控制器中找不到映射时重定向到index.html。这可以在 Spring boot 1.5.x 扩展(现已弃用)WebMvcConfigurerAdaptor 类中完成。这在此 stackoverflow 线程中进行了详细讨论:https://stackoverflow.com/a/46854105/2958428
我使用angular.json(以前的.angular-cli.json)中的outputPath 字段将我构建的角度应用程序放在这个位置target/classes/static。
这是示例代码:
@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");
}
});
}
}
【解决方案2】:
由于路径 adminlogin 未映射到任何 spring controller 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 页面。
我希望这会有所帮助。