当前位置: 首页 > 知识库问答 >
问题:

具有嵌套路由的AngularJS和Spring MVC

羊舌和安
2023-03-14

关于这个问题,我做了很多研究,还没有找到正确或具体的答案,所以我在这里提出这个问题,然后就开始讨论Spring MVC项目。

我的应用程序是用Spring MVC(带Spring boot)构建的,后端是AngularJS 1。前端是x。我还激活了HTML5模式(所以,没有使用,只是简单的url,比如http://podcast.dk.lan/podcasts/123/items/456/player).

我在后端有一个@Controller路由,将“/”请求重定向到我的索引。html。所有其他路由都由@RestController处理,并与JSON(在“/api”或“/system”上)一起使用。

我已经找到了将所有AngularJS路线映射到索引的正确方法。我的应用程序的html,而不破坏后端解析器的其他部分(例如资源)。

我尝试了以下元素:

@Controller
public class HomeController {   
    @RequestMapping(value = "/{.*}")
    private String home() {
    return "forward:/";
    }
}

它不起作用,因为如果我试图直接访问前端上的嵌套url(如 /podcasts/1/items/1),该url不会被请求映射正则表达式捕获。

@Controller
public class HomeController {   
    @RequestMapping(value = "/**/{.*}")
    private String home() {
    return "forward:/";
    }
}

此配置导致StackOverFlow错误,因为url将重定向到自身。。。

最近,在一个关于Spring Security和AngularJS的非常好的教程中,他们使用了以下模式:

@Controller
public class HomeController {   
@RequestMapping(value = "/{[path:[^\\.]*}")
    private String home() {
    return "forward:/";
    }
}

该模式通过排除任何带有url的url来排除所有资源(css和js)。(点)在url中。不幸的是,它不适用于嵌套路由。。。返回404错误。

因此,我的应用程序后端现在链接到我的路由前端,因为我必须将前端使用的AngularJS路由硬编码为请求映射值:

@Controller
public class HomeController {

    @RequestMapping(value = {"", "items", "podcasts", "podcasts/**", "player", "podcast-creation", "download", "stats"})
    private String home() {
        return "forward:/";
    }
}

我认为(我希望)有一个更好的解决方案,可以将所有“尚未映射的url后端映射”重定向到这样一个特定的方法。

我的项目的所有代码都托管在davinkevin/Podcast服务器上的github上(如果你想看到更多代码的话)

谢谢你的帮忙

共有1个答案

商华藏
2023-03-14

我不知道这是否是最好的解决方案,但它非常简单,对我们有效,我相信它应该能够处理您的案件。

这里的主要目标是让后端将所有应该由angular routes解析的请求(换句话说,后端没有真正的资源URI)转发到根/,这样当浏览器再次加载索引和angular应用程序时,angular可以在客户端解析路由。如果所有角度路由都有一个众所周知的保留前缀(即:/fe[前端的缩写]),则可以使用类似于/fe/**的请求映射模式,返回转发:/

您只需要确保所有的角路由都以/fe/开头,并且fe文件夹中没有静态资源,或者没有其他以该前缀开头的请求映射。

@Controller
public class HomeController { 
    @RequestMapping(value = "/fe/**")
    public String redirect() {
        return "forward:/";
    }
}
 类似资料:
  • 本文向大家介绍AngularJS ui-router (嵌套路由)实例,包括了AngularJS ui-router (嵌套路由)实例的使用技巧和注意事项,需要的朋友参考一下 我们都知道,如果使用原生路由的话,Angular的视图是通过ng-view这个指令进行加载的。比如这样:<div ng-view></div>。一般,我们都会把这个指令放在index.html这个文件里面,然后,通过控制器来

  • 本文向大家介绍angularjs ui-router中路由的二级嵌套,包括了angularjs ui-router中路由的二级嵌套的使用技巧和注意事项,需要的朋友参考一下 关于ui-router中嵌套路由中的问题 1.首先我们的页面层次为   其中Main.html是我们的主页,我们要在main.html中对路由进行统一的管理。 main.html页面中有一个ui-view在这里将填充PageTa

  • 1. 前言 本小节我们介绍如何嵌套使用 VueRouter。嵌套路由在日常的开发中非常常见,如何定义和使用嵌套路由是本节的重点。同学们在学完本节课程之后需要自己多尝试配置路由。 2. 配置嵌套路由 实际项目中的应用界面,通常由多层嵌套的组件组合而成。同样地,URL 中各段动态路径也按某种结构对应嵌套的各层组件,例如: /article/vue /a

  • 如果我将路由折叠起来,这样看起来就像: 工作很好。我嵌套的原因是因为我将在“dashboard”下有多个子项,并且希望它们都在URL中以为前缀。

  • 假设我希望RESTendpoint大致如下: 每个if上的CRUD都有意义。例如,/projects POST创建一个新项目,GET获取所有项目/projects/project_id GET仅获取该一个项目。 项目是特定于项目的,所以我将它们放在project_id下,这是一个特定的项目。 有没有办法创建这种嵌套路由? 现在我有这样的东西: 但是我正在寻找一种方法将项目路线嵌套到项目路线中,并能

  • 我在想这样的事情: 前台有一个不同的布局和风格与管理区域。所以在frontpage中的路由是home、about等等,其中一个应该是子路由。 /home应该呈现到Frontpage组件中,而/admin/home应该呈现在后端组件中。 最终解决方案: 这是我现在使用的最终解决方案。这个例子也像传统的404页面一样有一个全局错误组件。