2016-09-26 4 views
1

У нас есть интерфейс Ember frontend и Spring Boot. Когда Ember работает автономно на порту 4200 и backend на 8080, тогда все работает. Но этот сценарий несколько необычен для производственных сред, причем не только из-за проблемы CORS. URL-адрес бэкэнд должен быть известен уже во время сборки (!) Приложения Ember, поскольку он интегрирован в скомпилированное приложение ember. Это невозможно для многих проектов. Поэтому мы хотим интегрировать интерфейс Ember Append в Spring Spring, который обычно используется для, например, SPA с AngularJS. Приложение Ember (from/dist), таким образом, копируется в src/main/resource/static. После настройки rootURL и API.host с помощью приложения Ember, которое работает очень хорошо. Проблема возникает сейчас, когда в браузере создается ручная перезагрузка URL-адреса. Такой URL-адрес теперь является маршрутом Ember. HTTP-запрос поступает на сервер Spring Boot, который не знает маршрут, и мы получили ошибку 404.Как настроить маршруты emberjs в SpringMVC?

Как должен SpringMVC (как часть поддержки Spring Spring) отвечать на 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 является interpretet как пользователь-list.html или аналогичный, который не существует

ответ

1

после испытаний с различными решениями я придумал с действительно простой. Обеспечьте обычный, не-REST контроллер с отображением запросов для каждого маршрута, определенного приложением ember. На каждый такой запрос нужно ответить с наименованием вида начальной страницы приложения ember (index.html в большинстве случаев). Браузер загружает эту страницу html и запускает содержащее приложение ember. Приложение ember обнаруживает маршрут (поскольку маршрут был частью http-запроса) и работает в соответствии со всеми указанными конфигурациями маршрутов (шаблон, модель, контроллер).

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

}

0

Предыдущий ответ мне очень помог. Но я все еще думал о более эффективном решении, чем создание интерфейсных API для каждого маршрута. И я считаю, что лучшим решением было бы поставить «#» перед маршрутом ember, тогда маршруты ember будут выполнять запрос, а не переходить на серверный сервер.

Router.reopen ({ местонахождение: 'hash' });

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

Вот первый мой маршрут. И я поместил # в URL-адрес, теперь перезагрузка страницы работает.

Надеюсь, это поможет.

Смежные вопросы