#angular #spring-boot #browser #external #execution
Вопрос:
У меня есть приложение, которое состоит из локального «веб-приложения» с угловым передним концом и локальной задней загрузкой spring, собранной вместе и работающей на одном и том же порту.
Все работает нормально, пока мне не понадобится покинуть страницу и вернуться назад:
Пользователь должен выполнить вход на внешний сервер.
После входа в систему он/она возвращается к локальному приложению. URL-адрес перехода запускает контроллер в локальной загрузочной части приложения spring. теперь проблема заключается в том, чтобы вернуться к угловым маршрутам с этого момента, так как вместо контроллеров и маршрутов, определенных на странице приложения angular, запускается контроллер загрузки spring.
мне нужно было бы продолжить выполнение кода переднего плана в angular, и моя проблема заключается в том, как вернуться к коду angular из кода загрузки spring, где я приземлился сейчас после перехода (uri перехода-это мой хост с портом, на котором запущено приложение)
Внутренний контроллер после перехода:
@PostMapping(path = "/*someEndpoint*") public Object processResponse(@RequestBody @JsonProperty String requestBody) throws InternalServerException, ExecutionException, InterruptedException { ModelAndView *resultView* = *someService*.dispatchResponse(requestBody); return resultView; }
Попытка перенаправить, работает только для перехода на корневую страницу (это работает ниже), но мне нужно будет перенаправить на более конкретные URL-адреса, определить в angular, например «/someotherendpoint» или около того. но затем появляется сообщение об ошибке: «страница ошибки с белой меткой — в этом приложении нет явного сопоставления для /ошибки, поэтому вы видите это как запасной вариант», потому что у меня нет определенного контроллера с именем «/someotherendpoint» в части загрузки spring, только в угловой части.
@Component public class RedirectService { RestTemplate confirmed; public ModelAndView redirectToStartPage() { return new ModelAndView("redirect:/"); }
public ModelAndView dispatchResponse(String jsonResponse) throws InternalServerException, ExecutionException, InterruptedException { ModelAndView returnPage = redirectService.redirectToStartPage(); return returnPage; }
Frontend code in anglular, where the jump to the external domain with a java-script form-action is conducted:
post(body, url){ var mapForm = document.createElement('form'); mapForm.enctype = 'text/plain'; mapForm.method = 'POST'; mapForm.action = url; // define input element w data to submit in request body var mapInput = document.createElement('input'); mapInput.type = 'hidden'; mapInput.name = 'data'; mapInput.setAttribute('value', body); mapInput.setAttribute('id', 'data'); mapInput.setAttribute('type', 'textarea'); mapForm.appendChild(mapInput); document.body.appendChild(mapForm); mapForm.submit(); }
Funcion in javascript which is triggered after pressing the button on the angular-frontend where the jump the external page happens
applySTH(): void { let message: string; this.someService .*methodName*(this.*someOtherService*.*getSomeVariables*()) .pipe( map((response: *someVariable*) =gt; { *some assigning* }) ) .subscribe( (data) =gt; { *some handling* }); this.logger.info(message); let reqBody = { '*some-data* }; this.redirectToExternalHost(reqBody); }, (err) =gt; {*handling* } ); this.notification.openDialog(NgxLoggerLevel.ERROR, message); } ); } // Method to redirect to Page on *lt;hostgt;* with Post-Request redirectToExternalHost(reqBody: Object): any { let data = *someData*; this.*someService*.post(data, this.*someService*.*uri*); }
how can i pass back control /redirect to the front end code where i called the extarnal page? or redirect to another angular page (url , route defined in angular)
потому что я не могу адресовать просто страницы, URL-адреса и маршрутизацию, определенные в angular, так как на данный момент браузер продолжает общаться с серверной частью, ожидая, что контроллеры в серверной части будут слушать.
кто-нибудь знает решение? заранее большое спасибо!