如何用 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;
            });
}