2016-09-26 91 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中,現在重新加載頁面正在工作。

希望這會有所幫助。