如何从 Mono<Object> 获取对象
How to get the object from Mono<Object>
我正在使用 WebClient 与其他微服务通信。我想通过 id 从远程 UserService 获取用户然后我想将此用户信息发送到另一个远程服务问题是我得到的响应是 Mono 但我必须将它作为 User 对象获取。我试过 block() 但它没有用它总是抛出这个错误:java.lang.IllegalStateException: block()/blockFirst()/blockLast() are blocking, which is not supported in thread
这是一个代码
public User findUserById(String user_id){
return webClientBuilder.build().get().uri("http://localhost:7854/"+user_id)
.retrieve().onStatus(httpStatus -> HttpStatus.NOT_FOUND.equals(httpStatus),clientResponse -> Mono.empty())
.bodyToMono(User.class).block();
}
我正在使用
Spring 引导 2.5.4
Java11
假设调用其他服务是通过以下方法完成的:
public Mono<Whatever> callToAnotherService(User user){
// your logic here, I am assuming this is a WebClient call also.
}
并且您将提到的方法更改为:
public Mono<User> findUserById(String user_id){
return webClientBuilder.build().get().uri("http://localhost:7854/"+user_id)
.retrieve().onStatus(httpStatus -> HttpStatus.NOT_FOUND.equals(httpStatus),clientResponse -> Mono.empty())
.bodyToMono(User.class);
}
您现在可以在同时调用 findUserById
和 callToAnotherService
的 class 中执行以下操作:
findUserById("userId").flatMap(user -> callAnotherService(user)).subscribe();
我正在使用 WebClient 与其他微服务通信。我想通过 id 从远程 UserService 获取用户然后我想将此用户信息发送到另一个远程服务问题是我得到的响应是 Mono 但我必须将它作为 User 对象获取。我试过 block() 但它没有用它总是抛出这个错误:java.lang.IllegalStateException: block()/blockFirst()/blockLast() are blocking, which is not supported in thread
这是一个代码
public User findUserById(String user_id){
return webClientBuilder.build().get().uri("http://localhost:7854/"+user_id)
.retrieve().onStatus(httpStatus -> HttpStatus.NOT_FOUND.equals(httpStatus),clientResponse -> Mono.empty())
.bodyToMono(User.class).block();
}
我正在使用 Spring 引导 2.5.4 Java11
假设调用其他服务是通过以下方法完成的:
public Mono<Whatever> callToAnotherService(User user){
// your logic here, I am assuming this is a WebClient call also.
}
并且您将提到的方法更改为:
public Mono<User> findUserById(String user_id){
return webClientBuilder.build().get().uri("http://localhost:7854/"+user_id)
.retrieve().onStatus(httpStatus -> HttpStatus.NOT_FOUND.equals(httpStatus),clientResponse -> Mono.empty())
.bodyToMono(User.class);
}
您现在可以在同时调用 findUserById
和 callToAnotherService
的 class 中执行以下操作:
findUserById("userId").flatMap(user -> callAnotherService(user)).subscribe();