如何用webclient替换resttemplate实现

问题描述 投票:0回答:1

我正在尝试用一个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 {....};

    }

我被困在那部分,因为我找不到改变实例对象的方法...

还有另一点:这是注入另一个类中的,因为我需要针对多个目标并行运行此请求。因此,块调用是不够的。

有人对如何做有想法吗?

非常感谢!

spring webclient resttemplate reactor
1个回答
0
投票

可以很容易地实现如下:

@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;
            });
}
© www.soinside.com 2019 - 2024. All rights reserved.