1
resposta

WebClient Spring boot - onErrorResume

Ola pessoal. Tenho uma situação em uma chamada de um WebClient (conforme métodos abaixo etc) e eu preciso no onErrorResume que seja feito um reset do token e realizada uma nova chamada-tentativa.

Da forma como esta sendo implementado abaixo, da sempre "MonoErrorMessage".

Agradeço a ajuda. Obrigado.

    private String provaGetRequest(String uri) {
        return this.getDataWebClient(uri, null).onErrorResume(err -> {
            this.resetToken();
            return this.getDataWebClient(uri, null);
        });
    }
    private Mono<String> getDataWebClient(String uri, Object body) throws UnauthorizedException {
            return WebClient.get()
                    .uri(uri)
                    .headers(httpHeaders -> httpHeaders.setBearerAuth(bearerToken))
                    .retrieve()
                    .bodyToMono(String.class);
    }
1 resposta

Olá Edvaldo,

O problema que você está enfrentando é que você está tentando retornar um Mono de dentro do onErrorResume, mas o método provaGetRequest espera uma String.

Uma solução seria mudar o tipo de retorno do método provaGetRequest para Mono:

private Mono<String> provaGetRequest(String uri) {
    return this.getDataWebClient(uri, null).onErrorResume(err -> {
        this.resetToken();
        return this.getDataWebClient(uri, null);
    });
}

Agora, o método provaGetRequest retorna um Mono, que é uma sequência reativa que emite uma String quando a chamada HTTP é concluída. Você pode se inscrever neste Mono para obter o resultado quando estiver pronto.

Por exemplo:

provaGetRequest("http://example.com")
    .subscribe(result -> {
        // faça algo com o resultado
        System.out.println(result);
    });