java - 同一台服务器上的 Spring Boot + Angular2

标签 java spring angular spring-boot

this tutorial 之后,我成功地将我的 Angular2 应用程序与 Spring Boot 后端集成,将编译后的 JS 资源放置到/ui 子目录中。基本上一切正常,可以通过 appname/ui URL 访问 Angular2 应用程序。

但是,我想知道是否有办法告诉 Spring“传递”/ui 路径的子 URL,因为目前 Spring 拦截了所有针对 /ui/*,阻止 Angular2 路由器正确导航到 /ui 路径下的资源。

目前,我的一个 Controller 中只有这个映射:

@RequestMapping(value = "/ui")
public String uiIndex() {
    return "/ui/index.html";
}

有了这个,界面正确地显示在 /ui,但是 Spring 向我发送错误和 404 错误和 404 用于它下面的所有内容,当我直接从浏览器寻址它们时。不过,Angular2 应用程序中的路由器导航工作得很好。

编辑

我使用此配置将已编译的 Angular2 资源从 target/ui 添加到 static/ui 文件夹(我的项目使用 maven 构建):

        <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>

需要明确的是,唯一的问题是,当我在浏览器中输入像 /ui/home/settings 这样的 URL 时,Spring 会拦截请求并抛出错误。不过,我可以愉快地导航到/ui,然后导航到 Angular 上下文中的/home/settings。

最佳答案

经过反复试验,我终于设法做我想做的事。非常感谢 @EpicPandaforceuseful commentthis StackOverflow post

最终的解决方案是在 @Controller 中创建一个 @RequestMapping,如下所示:

@RequestMapping(value = "/ui/**/{path:[^\\.]*}")
public String redirectUi() {
    return "forward:/ui/index.html";
}

关于java - 同一台服务器上的 Spring Boot + Angular2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44246710/

相关文章:

java - cucumber 背景中的数据表

java - Sitemesh,无法构建工厂 : com. opensymphony.module.sitemesh.factory.DefaultFactory:

java - 用于 Spring bean 初始化的 ActiveMQ 连接故障转移检测

java - Spring bean基于属性的 Autowiring

javascript - 在 Angular 2 中使用浏览器化的 JS 库

java - 如何在java中按日期/时间比较和排序列表?

java - 将包装器数组转换为基元数组

Java Scanner .nextInt() 跳过输入

angular - Angular Ivy 在手动更改检测方面特别允许我们做什么?

javascript - 在 Nginx 代理后面刷新页面后,我的 Angular 6 路由返回 404