如何用 webclient 替换 resttemplate 实现
How to replace a resttemplate implementation with webclient
我正在尝试将 resttemplate 实现替换为 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 {....};
}
我卡在了那个部分,因为我找不到改变实例对象的方法...
还有一点:这是在另一个 class 中注入的,因为我需要针对多个目标并行 运行 这个请求。所以,块调用是不够的。
有人知道怎么做吗?
非常感谢!
可以通过以下方式轻松实现:
@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;
});
}
我正在尝试将 resttemplate 实现替换为 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 {....};
}
我卡在了那个部分,因为我找不到改变实例对象的方法...
还有一点:这是在另一个 class 中注入的,因为我需要针对多个目标并行 运行 这个请求。所以,块调用是不够的。
有人知道怎么做吗?
非常感谢!
可以通过以下方式轻松实现:
@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;
});
}