Angular 6(前端)+ Spring:配置路由

时间:2018-07-13 21:05:28

标签: spring angular spring-boot gradle kotlin

我已经用Angular 6(前端)和Kotlin / Java(后端)创建了一个Spring项目。我遵循了JavaSampleApproach's tutorial(除了,我使用Gradle代替了Maven)。

在Angular上,我关注了Angular's routing guide。这是我设置路线的方式:

const routes: Routes = [
  {path: 'clients', component: ClientsComponent},
  {path: 'scopes', component: ScopesComponent},
  {path: 'identity-providers', component: IdentityProvidersComponent},
  {path: 'diagnostics', component: DiagnosticsComponent},
  {path: '', redirectTo: '/clients', pathMatch: 'full'}
];

从那里,我首先在端口8080上运行ng serve,它运行良好。

然后,我运行ng build --prod,它将其构建到Spring项目文件夹中。

在我的src/main/kotlin/com.example.myproject目录中,基于@AndroidLover 's response创建了一个 ViewController 类:

package com.example.platformadmintool

import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController

@RestController
class ViewController {

    @RequestMapping("/clients", "/scopes", "/identity-providers", "/diagnostics")
    fun routing() : String {
        return "forward:/index.html"
    }
}

(我确实知道@AndroidLover的响应是针对Angular 2的。)

当我运行gradle命令clean build bootRun时,键入“ http://localhost:8080”时将加载首页。通过单击导航,我可以干净地遍历“ http://localhost:8080/diagnostics”和其他页面。

但是,如果我明确输入路线,例如“ http://localhost:8080/clients”,则所有页面显示的都是forward:/index.html的文本形式。

很明显,该错误是在我的请求映射中。我猜想这与我返回一个String有关,但是大多数在线解决方案似乎都使​​用forward:/index.html

我不太熟悉Spring并将其与Angular 6集成。如何配置路由使其在Spring中也可以工作?

编辑Similar problem

1 个答案:

答案 0 :(得分:0)

在我看来,您对* .js或* .css之类的静态文件有疑问。尝试在浏览器(Chrome中为F12)中打开开发工具,并在询问静态文件时检查哪些文件发送了证书。您的应用程序很可能总是返回index.html插入的* .js或* .css。 您必须将Java应用程序配置为:如果GET请求URL包含“。”,则它会返回静态文件。例如(java代码):

@RequestMapping(value = "/**/{[path:[^\\.]*}", method = RequestMethod.GET)
public String redirect() {
    return "forward:/";
}