у меня есть два метода, каждый из которых вызывает api rest, мне нужно вызвать их в одном потоке и выполнить асинхронно, поэтому я использовал completeblefuture и заключил оба вызова в один метод, моя проблема в том, что я не смог узнать исключение поднял из какой из них, это возможно? или до тех пор, пока они выполняются в одном потоке, я могу просто использовать метод completeExceptionally в completeblefuture и регистрировать исключение, так как есть ошибка при вызове первого или второго API, имеет ли это смысл или это не будет полезно для вызывающей стороны?
Вот симуляция этого сценария
// first api
public Codes findCodes(String codeID) {
Codes result = null;
try {
result = restTemplate.getForObject("localhost:8080/api/codes?id=" + codeID, Codes.class);
} catch (Exception e) {
// log(e) there is an error in calling codes api
}
return result;
}
//second api
public Point findPoints(String userName) {
Point result = null;
try {
result = restTemplate.getForObject("localhost:8080/api/points?userName=" + userName, Point.class);
} catch (Exception e) {
// log(e) there is an error in calling points api
}
return result;
}
//method calling both of them
@Async
public CompletableFuture<PointsWithCodesResponse> callTwoApis(String userName, String codeID) {
PointsWithCodesResponse response = new PointsWithCodesResponse();
response.setCodes(findCodes(codeID));
response.setPoints(findPoints(userName));
return CompletableFuture.completedFuture(response).exceptionally(t -> {
//log and handle ex, how to know if it's from first api or second
return null;
});
}
оба api используются в других частях приложения, и каждая из них имеет свою собственную обработку для исключения и ведения журнала