我正在尝试使用maven开发一个使用Spring Boot作为后端,Angular 2作为前端的应用程序。
角度2前端位于项目的src/main/resources/static
目录中。
当我在浏览器中输入http://localhost:8080/
URL时,一切都很好:我可以访问角度2前端,前端可以完美地与其余的api通信。我的angular 2路由工作正常:当我点击前端的链接时,我走右页,浏览器url栏显示正确的东西(即http://localhost:8080/documents
)
但问题是当我尝试在浏览器中直接写入相同的URL时。 Spring接管前端并表示/documents
没有映射。
有没有办法告诉春季靴子只是"听"到/api/*
网址和"重定向"所有其他人到前端?
这是我的Spring Controller类:
@RestController
@RequestMapping("/api")
public class MyRestController {
@Autowired
private DocumentsRepository documentRepository;
@CrossOrigin(origins = "*")
@RequestMapping(value = "/documents/list",
method = RequestMethod.GET,
produces = "application/json")
public Iterable<RfDoc> findAllDocuments() {
return documentRepository.findAll();
}
}
这是主要的应用程序类:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
这是我的app.route.ts:
import { provideRouter, RouterConfig } from '@angular/router';
import { DocumentComponent } from './doc.component';
const routes: RouterConfig = [
{
path: '',
redirectTo: 'documents',
pathMatch: 'full'
},
{
path: "documents",
component: DocumentComponent
}
];
export const appRouterProviders = [
provideRouter(routes)
];
答案 0 :(得分:3)
好的,所以我找到了一个非常好的解决方案(对我来说,至少):我改变了旧的AngularJS 1.X方式的位置,使用URL中的#(即http://localhost:8080/#/documents
)。
为了获得这种行为,我改变了我的引导程序
import { bootstrap } from '@angular/platform-browser-dynamic';
import { HTTP_PROVIDERS } from '@angular/http';
import { AppComponent } from './app.component';
import { appRouterProviders } from './app.routes';
import { AuthService } from './auth.service';
bootstrap(AppComponent, [AuthService,
appRouterProviders,
HTTP_PROVIDERS,
{ provide: LocationStrategy, useClass: HashLocationStrategy }
]);
希望这可以帮助别人!