Переместить CloseableHttpResponse во вложенную попытку с ресурсами - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть следующий код, использующий попытку с ресурсами с CloseableHttpResponse

CloseableHttpResponse response = null;
try (CloseableHttpClient httpClient = HttpClients.custom().build()){    
    //code...
    response = httpClient.execute(target, post);
    String responseText = EntityUtils.toString(response.getEntity());   
} catch (Exception e) {
    logger.error("Failed sending request", e);
} finally {
    if (response != null) {
        try {
            response.close();
        } catch (IOException e) {
            logger.error("Failed releasing response", e);
        }
    }
}

Могу ли я безопасно заменить на вложенную попытку с ресурсами:

try (CloseableHttpClient httpClient = HttpClients.custom().build()){
    URIBuilder uriBuilder = new URIBuilder(url);
    HttpHost target = new HttpHost(uriBuilder.getHost(), uriBuilder.getPort(), uriBuilder.getScheme());
    HttpPost post = new HttpPost(uriBuilder.build());
    try (CloseableHttpResponse response = httpClient.execute(target, post)) {
        String responseText = EntityUtils.toString(response.getEntity());   
    }
} catch (Exception e) {
    logger.error("Failed sending request", e);
}

Или лучше использоватьодна попытка с блоком ресурсов:

try (CloseableHttpClient httpClient = HttpClients.custom().build();
    CloseableHttpResponse response = getResponse(httpClient, url)) {

Иногда рефакторинг для одного блока проблематичен, поэтому я хотел бы знать, что вложенный / дополнительный блок является допустимым решением.

1 Ответ

0 голосов
/ 02 января 2019

HttpClient никогда не возвращает нулевой HttpResponse объект.Первая конструкция просто бесполезна.И вторая, и третья конструкции совершенно верны

...