我在this tutorial之后成功地将我的Angular2应用程序与Spring Boot后端集成,将已编译的JS资源放到/ ui子目录中。基本上一切正常,Angular2应用程序可以通过 appname / ui URL访问。
但是,我想知道是否有办法告诉Spring传递' / ui 路径的子网站的网址,如当前Spring拦截每个针对 / ui / * 的请求,阻止Angular2路由器正确导航到 / ui下的资源路径。
目前,我只在我的一个控制器中使用此映射:
@RequestMapping(value = "/ui")
public String uiIndex() {
return "/ui/index.html";
}
有了这个,界面就会正确地显示在 / ui ,但是Spring会向我发送错误信息,并为其下的所有内容发送404,当我直接从浏览器处理它们时。 Angular2应用程序内部的路由器导航工作正常。
修改
我使用此配置将已编译的Angular2资源从target / ui添加到static / ui文件夹(我的项目使用maven build):
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<includes>
<include>*.properties</include>
<include>templates/*.*</include>
</includes>
</resource>
<resource>
<directory>target/ui</directory>
<targetPath>static/ui</targetPath>
</resource>
要明确的是,唯一的问题是,当我在浏览器中输入一个URL,如 / ui / home / settings 时,Spring会拦截请求并抛出错误。我可以愉快地导航到/ ui,然后导航到Angular上下文中的/ home / settings。
答案 0 :(得分:2)
经过一番反复尝试后,我终于设法做了我想做的事情。非常感谢 @EpicPandaforce 的useful comment和this StackOverflow post
最终解决方案是在@RequestMapping
中创建一个@Controller
,如下所示:
@RequestMapping(value = "/ui/**/{[path:[^\\.]*}")
public String redirectUi() {
return "forward:/ui/index.html";
}
答案 1 :(得分:0)
您可以添加ResourceHandlers以配置在spring boot中提供的静态内容。
实施例
{{1}}
参见https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html#boot-features-spring-mvc-static-content
现在,您提到的教程的第5步有更简洁的方法,您是否跳过了这一步? (SRC /主/资源/静态)
答案 2 :(得分:0)
我认为最简单的方法就是使用Angular Hash Location Strategy。
import { LocationStrategy, HashLocationStrategy } from '@angular/common';
{ provide: LocationStrategy, useClass: HashLocationStrategy }
我希望能提供帮助。