【发布时间】:2020-01-02 12:45:23
【问题描述】:
我正在尝试用 webclient 替换 resttemplate 实现。这里的棘手之处在于,当响应解析时,我需要修改输入对象的属性。我没有找到实现它的方法...
这是其余模板代码:
public Instance login(final Instance instancia, final LoginDTO dto) {
String url = instancia.getBalancer() + API_AUTHENTICATE_PATH;
HttpEntity<LoginDTO> request = generateRequest(dto);
ResponseEntity<JWTToken> token = restTemplate.postForEntity(url, request, JWTToken.class);
instancia.setToken(token.getBody().getIdToken());
return instancia;
}
这就是我现在所拥有的:
@Override
public Mono<Instance> login(Instance instancia, LoginDTO dto) {
Mono<JWTToken> monoToken=webClient.post().uri(url).body((BodyInserters.fromObject(dto))).retrieve()
.bodyToMono(JWTToken.class);
return {....};
}
我被困在那部分,因为我找不到改变 Instance 对象的方法...
还有一点:这是在另一个类中注入的,因为我需要针对多个目标并行运行这个请求。所以,一个块调用是不够的。
有人知道怎么做吗?
提前非常感谢!
【问题讨论】:
-
如果我理解正确,您可以执行以下操作:JWTToken jWTToken = monoToken.block();
-
是的,那将是一个不错的选择。不幸的是,我忘了告诉用例是从另一个类并行调用并将其作为客户端注入。所以...我需要并行处理所有调用。事实上,我要编辑这个问题。很抱歉给您带来不便,非常感谢!
-
你有一个 Mono
,并且你想返回一个 Mono 。要将 Mono 转换为另一个 Mono,您可以使用 Mono 类的许多方法之一,在 rx 行话中称为运算符。在这种情况下,最常用的一个:map():projectreactor.io/docs/core/release/api/reactor/core/publisher/…
标签: spring webclient resttemplate reactor