是否可以使用 Java Stream api 重写带有 Rest-Assured 请求尝试的 WHILE 循环
Posted
技术标签:
【中文标题】是否可以使用 Java Stream api 重写带有 Rest-Assured 请求尝试的 WHILE 循环【英文标题】:Is it possible to rewrite WHILE loop with Rest-Assured requests attempts using Java Stream api 【发布时间】:2021-12-28 04:58:49 【问题描述】:我有一个通过 Rest-assured 发送请求的方法,如果响应不满足条件(响应状态码为 200),它会多次尝试,除非我得到 200 作为响应状态码
protected Response getResponseWithRetries(Map<String, Object> requestBody, String token, String url)
Response response = null;
int statusCode = HttpStatus.SC_BAD_GATEWAY;
int count = 0;
while (statusCode != HttpStatus.SC_OK && count < 3)
response = getResponse(requestBody, token, url);
statusCode = response.getStatusCode();
count++;
sleep(5000);
return response;
但是可以用 Stream api 重写这个循环吗?如果我可以在我的情况下应用它,我正在努力理解。首先,我没有要流式传输的响应集合。但我也不想提出几个请求来构建它(例如,当它们都成功时)
【问题讨论】:
【参考方案1】:您可以使用IntStream.range
替换条件中的count
部分,然后过滤http 状态代码的响应,并使用findFirst
返回第一个匹配项。
Optional<Response> response = IntStream.range(0, 3)
.mapToObj(i -> getResponse(requestBody, token, url))
.filter(r -> r.getStatusCode() == HttpStatus.SC_OK)
.findFirst();
return response.orElse(null);
如果您可能返回 null
而不是响应,则将返回类型更改为 Optional<Response>
是有意义的。
如果您想在失败的情况下获得最后一个响应,您可以进行 2 次迭代,然后在 2 次迭代中没有返回肯定状态代码时使用 Optional.orElseGet
进行最后一次 getResponse
调用。
Optional<Response> response = IntStream.range(0, 2)
.mapToObj(i -> getResponse(requestBody, token, url))
.filter(r -> r.getStatusCode() == HttpStatus.SC_OK)
.findFirst();
return response.orElseGet(() -> getResponse(requestBody, token, url));
【讨论】:
谢谢,这看起来像是我需要的东西,我需要的唯一更改是在所有尝试都失败时采取最后的响应。 我已经编辑了答案,以举例说明如何始终返回最后一次尝试。以上是关于是否可以使用 Java Stream api 重写带有 Rest-Assured 请求尝试的 WHILE 循环的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 YouTube Live Stream API 通过我的手机摄像头进行广播?
Java8中Stream类中的forEach是抽象方法,为啥在调用的时候不用重写该方法就能实现遍历?