Reputation: 5769
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
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