我正在尝试用一个webclient替换一个resttemplate实现。这里棘手的事情是,当响应解析时,我需要从输入对象修改属性。我找不到实现它的方法...
这是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 {....};
}
我被困在那部分,因为我找不到改变实例对象的方法...
还有另一点:这是注入另一个类中的,因为我需要针对多个目标并行运行此请求。因此,块调用是不够的。
有人对如何做有想法吗?
非常感谢!
可以很容易地实现如下:
@Override
public Mono<Instance> login(Instance instancia, LoginDTO dto) {
return webClient
.post()
.uri(url)
.body((BodyInserters.fromObject(dto)))
.retrieve()
.bodyToMono(JWTToken.class)
.map(token -> {
instancia.setToken(token.getBody().getIdToken());
return instancia;
});
}