如何在SpringMVC中配置emberjs路由?

时间:2016-09-26 09:31:52

标签: spring-mvc ember.js spring-boot

我们有一个Ember前端和Spring Boot后端。 当Ember在端口4200上独立运行并且在8080上运行Spring Boot后端时,一切正常。但是这种情况在生产环境中有点不寻常,不仅仅是因为CORS问题。必须在Ember应用程序的构建时间(!)中知道后端的URL,因为它已集成在已编译的ember应用程序中。许多项目都无法做到这一点。因此,我们希望在Spring Boot后端中集成前端Ember App,这通常用于例如使用AngularJS的SPA。 因此,Ember应用程序(来自/ dist)被复制到src / main / resource / static。使用适用于Ember的应用程序调整rootURL和API.host之后。 当在浏览器中进行URL的手动重新加载时,问题就出现了。这样的URL现在是Ember路线。 http请求到达Spring Boot后端,后端不知道路由,我们收到404错误。

SpringMVC(作为Spring Boot后端的一部分)应如何回答此类路由的httpRequest,以便Ember应用程序继续工作并处理请求?

HTML Page request (by browser)
http://host/springBootAppContext/index.html => src/main/resource/static/index.html (ember app) 

REST API request (by Ember App)
http://host/springBootAppContext/users => RESTController mapped for /users

Ember Routing (by Ember App)
http://host/springBootAppContext/user-list => ???

您无法提供正常的Spring MVC @Controller类,因为ModelView响应是解释为user-list.html或类似的不存在

2 个答案:

答案 0 :(得分:1)

经过不同解决方案的测试后,我想出了一个非常简单的解决方案。 为ember应用程序定义的每个路由提供一个普通的非REST控制器,其中包含请求映射。每个此类请求都必须使用ember应用程序启动页面的视图名称(大多数情况下为index.html)进行回答。浏览器加载该html页面并启动包含的ember应用程序。 ember应用程序检测路由(因为路由是http请求的一部分)并根据所有指定的路由配置(模板,模型,控制器)工作。

没有404 NotFound了。

@Controller
public class EmberRouteController {

public static final String INDEX = "index.html";

@RequestMapping(value = "/ember-route-1", method = RequestMethod.GET)
public String emberRoute1() {
    return INDEX;
}

@RequestMapping(value = "/ember-route-2", method = RequestMethod.GET)
public String emberRoute2() {
    return INDEX;
}

}

答案 1 :(得分:0)

之前的回答对我帮助很大。但我仍然在考虑比为每条路线创建后端API更好的解决方案。我认为更好的解决方案是将#'#'在ember路由之前,然后ember路由服务请求而不是去后端服务器。

Router.reopen({   位置:'哈希' });

Ex:http://localhost:8008/#/first

首先是我的路线。我已经在URL中添加了#,现在重新加载页面正在运行。

希望这会有所帮助。