我正在尝试实现一个通用的REST客户端,如下所示。我有自己的模型来将HTTP响应表示为Response T。这里的T是服务调用的返回类型,它可以只是T或T的列表。下面的代码无法编译,这就是我需要帮助的地方。如果你知道完成同样任务的更好的方法,你可以提出建议。
第一个
并最终调用如下所示的方法,
@Test
void getAsync() {
// Arrange
var baseUrl = settings.get("api.baseUri");
var options = new UriOptions(baseUrl, "students/6277aade6f047803e8ae4bcf");
var headers = new Headers(new HashMap<String, String>(), new HashMap<String, String>());
// Act
var response = restApiClient.<Student>getAsync(options, headers);
// Assert
response.thenAccept((r) ->
{
Assertions.assertEquals(200, r.getStatusCode());
});
}
1条答案
按热度按时间pbossiut1#
若要回答标题中的问题“如何从CompletableFuture返回CompletableFuture“:通常会使用
thenApply
和friends:查看您的具体代码,
thenComposeAsync
的lambda中似乎存在语法错误(它由两个 CompletableFuture 示例组成,因此其lambda需要返回另一个CompletableFuture示例,而不是值本身)。由于它不做任何代价高昂的工作,因此异步转换值显得有些多余。一个简单的
thenApply
就可以很好地完成这项工作:如果你坚持使用
thenCompose
,那么你需要将你的结果 Package 在另一个CompletableFuture中: