如果请求没有 return 使用 webClient 出错,我如何 return 清空单声道

How i return Empty mono if the request doesn't return error using webClient

我想知道如何在我使用 webClient 时 return 一个 empty Mono,我有这段代码,当请求 return 一个用户时它可以工作.

public User getUserByUsername(String username) {
            Mono<User> user = webClient.get().uri(uriBuilder -> uriBuilder
                    .path("localhost:8090/user" + "/getByUsername").queryParam("username", username).build())
                    .retrieve()
                    .bodyToMono(User.class);

            User userRet = user.block();
            return userRet;
        
    }

首先,如果您真的想充分利用反应式堆栈,请不要使用 block()。有了它,您将阻塞线程以等待响应,不要那样做。您必须始终在代码中处理 MonoFlux。大致如下:

public Mono<User> getUserByUsername(String username) {
    return webClient.get().uri(uriBuilder -> uriBuilder
            .path("localhost:8090/user" + "/getByUsername").queryParam("username", username).build())
            .retrieve()
            .bodyToMono(User.class);
}

然后,如果响应是 4XX 或 5XX,您可以指定要执行的操作。下面是 5XX 的示例:

public Mono<User> getUserByUsername(String username) {
    return webClient.get().uri(uriBuilder -> uriBuilder
            .path("localhost:8090/user" + "/getByUsername").queryParam("username", username).build())
            .retrieve()
            .onStatus(HttpStatus::is5xxServerError, response -> Mono.empty())
            .bodyToMono(User.class);
}