как получить то, чего нет в sysn c в запросе - PullRequest
0 голосов
/ 27 марта 2020

Я делаю вызов 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();
        }

    }
}
...