gpt4 book ai didi

java - 带有单页 angular2 重定向的 Spring Boot

转载 作者:IT老高 更新时间:2023-10-28 13:44:44 24 4
gpt4 key购买 nike

我有一个带有 Spring Boot 的单页 Angular 应用程序。如下所示:

src
main
java
controller
HomeController
CustomerController
OtherController
webapp
js/angular-files.js
index.html

Spring boot 正确默认为 webapp 文件夹并提供 index.html 文件。

我想做的是:

  1. 对于每个以 /api 开头的本地 REST 请求,覆盖并重定向到默认 webapp/index.html。我计划为 spring Controller 提供任何 /api 服务。

  2. 有没有办法给所有的 Controller 加上 API 前缀,这样我就不用每次都写 API 了?例如

    @RequestMapping("/api/home") 可以在代码中写简写@RequestMapping("/home")

@RequestMapping("/api/other-controller/:id") can write shorthand  @RequestMapping("/other-controller/:id")

我正在寻找每个 API 请求,例如1) http://localhost:8080/api/home将 API 与 API 保持一致并解析正确的 Controller 并返回 JSON,但是如果有人输入像 http:///localhost/some-url 这样的 URL或 http:///localhost/some-other/123/url然后它将提供 index.html 页面并保留 URL。

enter image description here

其他方法:尝试添加#ErrorViewResolver: Springboot/Angular2 - How to handle HTML5 urls?

最佳答案

如果您厌倦了通过遵循如此多相互冲突的解决方案来解决这个问题 - 看这里!!

几小时后几小时 尝试遵循来自数十篇堆栈溢出和博客文章的所有分散建议,我终于找到了始终重定向到 index.html 的最小 PURE spring boot + angular 6 应用程序。在非根页面上刷新后的 html,同时维护所有 REST API 端点路径。没有 @EnableWebMvc,没有 @ControllerAdvice,没有更改 application.properties,没有自定义 ResourceHandlerRegistry 修改,只是简单:

非常重要的先决条件

*必须*ng build输出包含到Spring的resources/static文件夹中。您可以通过 maven-resources-plugin 完成此操作。在这里学习:Copying multiple resource directories to independent target directories with maven

代码

@Controller
@SpringBootApplication
public class MyApp implements ErrorController {

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

private static final String PATH = "/error";

@RequestMapping(value = PATH)
public String error() {
return "forward:/index.html";
}

@Override
public String getErrorPath() {
return PATH;
}
}

推理

  • 在构建时将 ng-build 的输出包含到 resources/static 中可以让 spring View 重定向 ("forward:/index.html") 成功。似乎 spring 无法重定向到资源文件夹之外的任何内容,因此如果您尝试访问站点根目录下的页面,它将无法正常工作。
  • 使用默认功能(即不添加 @EnableWebMvc 或更改 application.properties)导航到 / 会自动提供 index.html (如果它包含在 resources/static 文件夹中)因此无需在那里进行更改。
  • 使用默认功能(如上所述),在 Spring Boot 应用程序中遇到的任何错误都会路由到 /error 并实现 ErrorController 会覆盖该行为 - 你猜对了 -路由到 index.html 允许 Angular 接管路由。

备注

关于java - 带有单页 angular2 重定向的 Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43913753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com