Я пытаюсь разработать пример приложения Rest API с использованием Spring boot для тестирования моей java клиентской библиотеки (которая является преобразованием JS клиента). Java клиент выполняет некоторые асинхронные c задачи и возвращает ответ в виде обратного вызова.
Вот пример того, как я вызываю его из службы моего примера приложения.
@Async
public void initializeUser(InitRequest initRequest) {
String BASE_URL = "http://sample_url";
client.initUser(BASE_URL, initRequest, new ResponseCallback<InitRequest>() {
@Override
public void onSuccess(@NonNull InitRequest arg0) {
// Return arg0 to controller
System.out.println("User Initialized: " + arg0.getId());
}
@Override
public void onError(@NonNull ResponseBody error) {
// Return error to controller
System.out.println("User Initialize failed");
}
@Override
public void validationError(@NonNull String arg0) {
// return validationError to controller
// TODO Auto-generated method stub
}
});
}
Здесь initUser метод реализован в моем клиенте. Когда я вызываю этот метод из моего контроллера. контроллер возвращается до того, как фактический запрос завершен, и я не могу видеть никакого ответа в почтальоне.
Вот метод контроллера.
@RequestMapping(method=RequestMethod.POST, value = "/init" )
public void initUser( @RequestBody InitRequest initRequest) {
experimentServices.initializeUser(initRequest);
// wait for request to finish and send response to user
}
Как и в javascript я могу использовать обещания или async / ждут, пока службы дадут ответ, прежде чем вернуться к пользователю.
Я хотел бы знать .....
1) Как добиться чего-то подобного в Java? (Службы возвращают некоторые данные контроллеру, который затем отправляется как ответ конечному пользователю.)
2) Java методам необходимо указать c ответ возврата, в то время как службы могут выдавать объект ответа Error, ValidationError или Successfull. Есть ли способ правильно обработать все это в одной функции?
Любые ссылки или документация помогут. Спасибо