关于这个问题,我做了很多研究,还没有找到正确或具体的答案,所以我在这里提出这个问题,然后就开始讨论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上(如果你想看到更多代码的话)
谢谢你的帮忙
我不知道这是否是最好的解决方案,但它非常简单,对我们有效,我相信它应该能够处理您的案件。
这里的主要目标是让后端将所有应该由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页面一样有一个全局错误组件。