我有一个带有 Spring Boot 的单页 Angular 应用程序。它看起来像下面这样:
src
main
java
controller
HomeController
CustomerController
OtherController
webapp
js/angular-files.js
index.html
Spring Boot 正确默认为 webapp 文件夹并提供 index.html 文件。
我想要做的是:
对于每个 不 以
/api
开头的本地 REST 请求,覆盖并重定向到默认的 webapp/index.html。我计划为弹簧控制器提供任何东西/api
。有没有办法为所有控制器加上 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 保持一致并解析为正确的控制器并返回 JSON,但是如果有人输入像 http:///localhost/ 这样的 URL some-url 或 http:///localhost/some-other/123/url 然后它将提供 index.html 页面并保留 URL。
替代方法:尝试添加#ErrorViewResolver: Springboot/Angular2 - How to handle HTML5 urls?
原文由 Robbo_UK 发布,翻译遵循 CC BY-SA 4.0 许可协议
更新 15/05/2017
让我为其他读者重新表述您的查询。 ( _如有误解请指正_)
背景
使用 Spring Boot 和从类路径提供静态资源
要求
所有
404
非 api 请求都应重定向到index.html
。NON API - 表示 URL 不以
/api
开头的请求。API - 404 应该像往常一样抛出
404
。示例响应
/api/something
将抛出404
/index.html
将服务器index.html/something
- 将重定向到index.html
我的解决方案
如果任何处理程序对给定资源不可用,让 Spring MVC 抛出异常。
将以下内容添加到
application.properties
添加一个
ControllerAdvice
如下您可以根据需要自定义错误消息。
为此,您可以创建一个
BaseController
并将RequestMapping路径设置为/api
例子
并扩展此
BaseController
并确保您 不 使用@RequestMapping
注释子类上一个答案
您可以创建一个
Filter
重定向到/index.html
如果请求路径不以/api
。