簡體   English   中英

如何從 RestTemplate 獲取可選類型作為響應

[英]How to get an Optional type as a response from RestTemplate

我有兩個彈簧應用程序正在運行。 一個人使用 RestTemplate 調用另一個應用程序中的 api。 此 api 的返回類型是Optional<User> 調用應用程序使用以下方法進行調用:

restTemplate.getForObject(path, Optional.class)

在調試時,我看到 api 正確地返回了對象,但不知何故我的調用應用程序得到了一個空響應體。 因此,我嘗試將 api 的返回類型更新為User並將調用代碼更新為: restTemplate.getForObject(path, User.class)並且它工作正常。

我需要知道如何使用 RestTemplate 獲取可選響應類型。 我不知道我做錯了什么。

您需要構建自己的 RestTemplate 類來擴展現有的RestTemplate類,該類提供返回預期響應類型的可選的方法。

下面我提供了一個小示例,展示了您可以實現它的方式:

public class FooRestTemplate extends RestTemplate {
    public <T> Optional<T> getForObjectAsOptional(final URI url, Class<T> responseType) throws RestClientException {
        try {
            return Optional.ofNullable(super.getForObject(url, responseType));
        } catch (HttpClientErrorException ex) {
            logger.error("Error: ", ex);
            return Optional.empty();
        }
    }
}

這只是一個簡單的例子。 您還可以擴展 catch 塊。 例如,僅當狀態碼等於 404 not found 時才返回Optional.empty()

public class FooOptionalEmptyNotFoundRestTemplate extends RestTemplate {
    public <T> Optional<T> getForObjectAsOptional(final URI url, Class<T> responseType) throws RestClientException {
        try {
            return Optional.ofNullable(super.getForObject(url, responseType));
        } catch (HttpClientErrorException ex) {                
            if(ex.getStatusCode().equals(HttpStatus.NOT_FOUND)) {
                return Optional.empty();
            }
            
            logger.error("Error: ", ex);
            throw ex;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM