Как отловить исключение тайм-аута при использовании API вызова RestTemplate - PullRequest
0 голосов
/ 06 мая 2019

У меня есть API вызова функции, используйте RestTemplate.Я хочу перехватить исключение, когда тайм-аут вернет ноль, это мой код:

//Create resttemplate
public List<String> getRoleUser(String username) {
    try{
        RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory());
        String[] list = restTemplate.getForObject("(link call api)", String[].class);
        return Arrays.asList(list);
    }catch (Exception ex){
        ex.printStackTrace();
        return null;
    }
}

//Override timeouts in request factory
private SimpleClientHttpRequestFactory getClientHttpRequestFactory()
{
    SimpleClientHttpRequestFactory clientHttpRequestFactory
                      = new SimpleClientHttpRequestFactory();
    //Connect timeout
    clientHttpRequestFactory.setConnectTimeout(10_000);

    //Read timeout
    clientHttpRequestFactory.setReadTimeout(10_000);
    return clientHttpRequestFactory;
}

, но это не работает.Итак, как я могу вернуть ноль, когда время истекло?

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Я решил эту проблему. После вызова API, я снова проверяю возврат значения RestTemplate. Этот код:

public List<String> getRoleUser(String username) {
        try {
            RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory());
            String[] list = restTemplate.getForObject("link call api",
                    String[].class);
            if (list.length > 0) {
                return Arrays.asList(list);
            }
            return null;
        } catch (Exception exception) {
            return null;
        }
    }
0 голосов
/ 06 мая 2019

Вы должны перехватить исключение HttpStatusCodeException:

try {
    restTemplate.exchange(...);
} catch (HttpStatusCodeException exception) {
    int statusCode = exception.getStatusCode().value();
    ...
}
...