You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular项目集成Spring Boot Tomcat服务器后路由失效求助

我来帮你搞定这个问题!这个情况在Angular单页应用(SPA)部署到Spring Boot后端时非常常见——在Angular CLI环境下正常,是因为dev server会自动把所有前端路由请求转发到index.html,但Spring Boot默认不会这么做,当你直接访问/op或/biologusers时,后端会把这些路径当作后端接口去匹配,找不到就返回404。下面给你两个可行的解决方案:

方案一:使用Angular哈希路由(无需修改后端)

这个方案最简单,只需要修改Angular的路由配置,启用哈希模式,让后端服务器不解析路由路径的哈希部分,直接交给Angular处理。

修改你的Angular路由配置代码,在RouterModule.forRoot方法中添加useHash: true参数:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { RouterModule, Routes} from '@angular/router';
import { HttpModule } from '@angular/http';
import { AppComponent } from './app.component';
import { ListUserComponent } from './components/list-user/list-user.component';
import { UserFormComponent } from './components/user-form/user-form.component';
import { UserService } from './shared_service/user.service';
import { ListBioLogUserComponent } from './components/list-bio-log-user/list-bio-log-user.component';

const appRoutes:Routes=[
  {path:'', component:ListUserComponent},
  {path:'op', component:UserFormComponent},
  {path:'biologusers', component:ListBioLogUserComponent}
];

@NgModule({
  declarations: [
    AppComponent,
    ListUserComponent,
    UserFormComponent,
    ListBioLogUserComponent
  ],
  imports: [
    BrowserModule,
    HttpModule,
    // 添加useHash: true启用哈希路由
    RouterModule.forRoot(appRoutes, {useHash: true})
  ],
  providers: [UserService],
  bootstrap: [AppComponent]
})
export class AppModule { }

修改完成后,重新执行ng build --prod打包,把dist目录下的文件放到Spring Boot的resources/static目录,重启服务后,访问路径会变成http://你的域名/#/op和http://你的域名/#/biologusers,这时就能正常访问了。

方案二:配置Spring Boot转发前端路由(保持干净路由)

如果你不想用哈希前缀的路由,可以在Spring Boot中添加一个控制器,把所有前端路由的GET请求转发到index.html,让Angular接管路由处理。

创建一个名为WebController的控制器类:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class WebController {

    // 匹配你的前端路由路径
    @GetMapping({"/op", "/biologusers", "/"})
    public String forwardToIndex() {
        return "forward:/index.html";
    }

    // 通配符匹配所有非静态资源的请求(避免转发js、css、图片等文件)
    @GetMapping("/**/{path:[^\\.]*}")
    public String forwardAllRoutes() {
        return "forward:/index.html";
    }
}

这个控制器会拦截所有不带文件后缀(比如.js、.css)的GET请求,把它们转发到index.html,这样Angular就能正确处理这些前端路由了。

额外注意事项

如果你的Spring Boot应用部署在特定上下文路径下(比如http://你的域名/my-app),打包Angular时需要指定base href,避免资源路径错误:

ng build --prod --base-href /my-app/

内容的提问来源于stack exchange,提问作者Jagadeeshwaran Kuppuraj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:25:37