我们有一个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或类似的不存在
答案 0 :(得分:1)
没有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中添加了#,现在重新加载页面正在运行。
希望这会有所帮助。