如果请求没有 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()
。有了它,您将阻塞线程以等待响应,不要那样做。您必须始终在代码中处理 Mono
和 Flux
。大致如下:
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);
}
我想知道如何在我使用 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()
。有了它,您将阻塞线程以等待响应,不要那样做。您必须始终在代码中处理 Mono
和 Flux
。大致如下:
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);
}