Я делаю вызов API, ответ на этот вызов не синхронизирован c с запросом, который он получит через 5 минут, но я не хочу ждать ответа. После того, как ответ получен, мне нужно проанализировать и затем сохранить его без задержки при выполнении другого метода.
Подскажите, пожалуйста, как этого добиться весной MVC. Вы можете найти мой код ниже, который я использую для того же, но я не получаю значения в логгере после получения ответа.
import java.util.HashMap;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
import org.springframework.util.concurrent.ListenableFuture;
import org.springframework.util.concurrent.ListenableFutureCallback;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.client.AsyncRestTemplate;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.context.request.async.DeferredResult;
import com.psg.dao.CtiIntegrationdao;
// @Controller
@Service
public class ListningService {
private static final Logger logger = Logger.getLogger(ListningService.class.getName());
@Autowired
CtiIntegrationdao daoCtiInt;
//@RequestMapping({"list"})
@PostConstruct
public void ListningReponse() {
HashMap<String,String> results=daoCtiInt.getKnolarity_Config();
String endpoint;
endpoint=results.get("30");
endpoint=endpoint.replace("<<AUTH>>",results.get("26"));
logger.info(endpoint);
logger.info("============================================================================================@postconstruct=========");
AsyncRestTemplate restTemplate = new AsyncRestTemplate();
try {
final DeferredResult<String> result = new DeferredResult<>();
ListenableFuture<ResponseEntity<ListningAPIPojo>> futureEntity = restTemplate.getForEntity(endpoint, ListningAPIPojo.class);
logger.info("IN TRY");
futureEntity.addCallback(new ListenableFutureCallback<ResponseEntity<ListningAPIPojo>>() {
@Override
public void onSuccess(ResponseEntity<ListningAPIPojo> result) {
logger.info("-----responsebody-----"+result.getBody().getAgent_number());
logger.info("-----responsebody-----"+result.getBody().getBusiness_call_type());
logger.info("-----responsebody-----"+result.getBody().getCall_duration());
logger.info("-----responsebody-----"+result.getBody().getCall_recording());
logger.info("-----responsebody-----"+result.getBody().getCall_solution());
logger.info("-----responsebody-----"+result.getBody().getCall_Type());
logger.info("-----responsebody-----"+result.getBody().getDestination());
}
@Override
public void onFailure(Throwable ex) {
result.setErrorResult(ex.getMessage());
logger.info("------------Failure Block"+result.toString());
}
});
}catch(HttpClientErrorException ex) {
logger.info(ex.getMessage());
}catch(Exception ex) {
ex.printStackTrace();
}
}
}