![](/img/trans.png)
[英]How to get STRING response from RestTemplate postForLocation?
[英]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.