使用Spring Boot和Angular 2处理URL的问题

Eri*_*ric 5 url routing spring-boot angular

我正在尝试使用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.

有没有办法告诉spring boot只能"监听" /api/*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();
    }

}
Run Code Online (Sandbox Code Playgroud)

这是主要的应用程序类:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}
Run Code Online (Sandbox Code Playgroud)

这是我的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)
];
Run Code Online (Sandbox Code Playgroud)

Eri*_*ric 2

好的,所以我找到了一个完美的解决方案(至少对我来说):我将我的位置更改为旧的 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 }
]);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助别人!