gpt4 book ai didi

java - Web 客户端在未找到响应时返回 Optional.empty()

转载 作者:行者123 更新时间:2023-12-04 02:35:54 24 4
gpt4 key购买 nike

我正在尝试制作 WebClient返回 Optional.empty()当我从服务器收到 404 时,未找到。但相反,我得到了一个带有 User 的 Optional所有属性都设置为 null 的对象。

我错过了什么?

@Override
public Optional<User> getUser(Username username) {
return webClient
.get()
.uri(buildUrl(username))
.retrieve()
.onStatus(HttpStatus.NOT_FOUND::equals, response -> Mono.empty())
.onStatus(HttpStatus::is4xxClientError, response -> createError(response, CLIENTERROR))
.onStatus(HttpStatus::is5xxServerError, response -> createError(response, SERVRERROR))
.bodyToMono(User.class)
.blockOptional();
}

最佳答案

您可以使用 Mono 中的 onError* 函数来处理这些情况。onErrorResume在异常和 onErrorMap 上创建一个空/错误 Mono将异常转换为不同的异常类型。
例如:

@Override
public Optional<User> getUser(Username username) {
return webClient
.get()
.uri(buildUrl(username))
.retrieve()
.onStatus(httpStatus -> httpStatus.is4xxClientError() && httpStatus != HttpStatus.NOT_FOUND, response -> createError(response, CLIENTERROR))
.onStatus(HttpStatus::is5xxServerError, response -> createError(response, SERVRERROR))
.bodyToMono(User.class)
.onErrorResume(WebClientResponseException.NotFound.class, notFound -> Mono.empty())
.blockOptional();
}

关于java - Web 客户端在未找到响应时返回 Optional.empty(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61868021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com