【发布时间】:2016-12-01 06:24:35
【问题描述】:
我正在尝试使用 maven 开发一个应用程序,后端使用 Spring Boot,前端使用 Angular 2。
angular 2 前端位于项目的src/main/resources/static 目录中。
当我在浏览器中输入http://localhost:8080/ URL时,一切都很好:我可以访问angular 2前端,并且前端可以与其余的api完美通信。我的 Angular 2 路由工作正常:当我点击前端的链接时,我转到正确的页面,浏览器 url 栏显示正确的内容(即http://localhost:8080/documents)
但问题是当我尝试直接在浏览器中编写相同的 URL 时。 Spring 接管了前端,并表示 /documents 没有映射。
有没有办法告诉 spring boot 只“收听”/api/* URL 并将所有其他 URL “重定向”到前端?
这是我的 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)
];
【问题讨论】:
-
有一种方法可以只听 /api/* 。为此,您需要有一个过滤器。
-
我该怎么做?我对这些东西很陌生...
标签: url angular spring-boot routing