robert trudel
robert trudel

Reputation: 5769

Migration ResponseEntity to Mono<ResponseEntity

In a spring boot application, I do a call to a ms with webclient

ResponseEntity response = webClient.post() .uri("/auth/login") .body(Mono.just(loginRequest), LoginDto.class) .retrieve() .toEntity(LoginResponse.class) .block();

After I take roles and put it in a Collection

Collection<? extends GrantedAuthority> authorities = response.getBody().getRoles().stream()
            .map(item -> new SimpleGrantedAuthority(item)).collect(Collectors.toList());

After I create a return a Mono

Mono.just(new UsernamePasswordAuthenticationToken(username, password, authorities));

I modified ms to return Mono<ResponseEntity> to be really reactive

With this change, I don't know what to change

Mono<ResponseEntity<LoginResponse>> response = webClient.post()
            .uri("/auth/login")
            .body(Mono.just(loginRequest), LoginDto.class)
            .retrieve()
            .toEntity(LoginResponse.class);

Collection<? extends GrantedAuthority> authorities = response.getBody().getRoles().stream()
            .map(item -> new SimpleGrantedAuthority(item)).collect(Collectors.toList());

Mono.just(new UsernamePasswordAuthenticationToken(username, password, authorities));

Upvotes: 0

Views: 1811

Answers (1)

Toerktumlare
Toerktumlare

Reputation: 14783

you use flatMap to map something to something else in an async way.

public Mono<UsernamePasswordAuthenticationToken> foobar() {
    Mono<ResponseEntity<LoginResponse>> response = webClient.post()
            .uri("/auth/login")
            .body(Mono.just(loginRequest), LoginDto.class)
            .retrieve()
            .toEntity(LoginResponse.class);

    return response.flatMap(response -> {
        Collection<? extends GrantedAuthority> authorities = response.getBody()
             .getRoles()
             .stream()
             .map(item -> new SimpleGrantedAuthority(item))
             .collect(Collectors.toList());
        return Mono.just(new UsernamePasswordAuthenticationToken(username, password, authorities));
    }
}

Upvotes: 1

Related Questions