2016-09-26 163 views
1

我们有一个Ember前端和Spring Boot后端。 当Ember在端口4200上运行独立并在8080上运行Spring Boot后端时,一切正常。但是这种情况在生产环境中有些不寻常,不仅因为CORS问题。后端的URL必须在Ember应用程序的构建时(!)已知,因为它已经集成在编译后的应用程序中。对许多项目来说这是不可能的。因此,我们希望在Spring Boot后端集成前端Ember应用程序,这通常用于例如SPA与AngularJS。 Ember应用程序(来自/ dist)因此被复制到src/main/resource/static。使用Ember应用程序调整rootURL和API.host后,效果非常好。 现在的问题是,当在浏览器中手动重新加载URL时。这样的URL现在是Ember路线。 http请求到达Spring Boot后端,它不知道路由,我们得到了404错误。如何在SpringMVC中配置emberjs路由?

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类,因为模型视图响应interpretet为用户list.html或类似不存在

回答

1

后,用不同的解决方案的测试,我想出了一个非常简单的。 为由烬宝应用定义的每条路由提供一个正常的,非REST控制器和请求映射。每个这样的请求都必须用呃应用程序开始页面的视图名称(大多数情况下是index.html)来回答。浏览器加载该HTML页面并启动包含的应用程序。应用程序检测路由(因为路由是http请求的一部分),并根据所有指定的路由配置(模板,模型,控制器)工作。

否404未找到。

@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; 
} 

}

0

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

Router.reopen({0}位置:'hash' });

例:http://localhost:8008/#/first

这里首先是我的路线。我已经把#放在URL中,现在重新加载页面正在工作。

希望这会有所帮助。