首页 > 解决方案 > 使用 RestTemplate 调用 API 时如何捕获超时异常

问题描述

我有函数调用 api,使用 RestTemplate。我想在超时将返回 null 时捕获异常,这是我的代码:

//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;
}

但它不起作用。那么,超时时如何返回null?

标签: javaspring-bootresttemplate

解决方案


您应该捕获一个 HttpStatusCodeException 异常:

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

推荐阅读