Apart from learning the basics about the reactive types Mono and Flux, it might be difficult to understand .retrieve() and .exchange() when using the Spring WebClient for the first time. With this blog post, I want to give you an overview of the Spring WebClient functions exchange and retrieve their differences, and when to use them.
TL;DR: Always try to use the WebClient .retrieve(). If you need more fine-grain control, use the .exchange() method but understand your additional responsibilities of always releasing the body.
UPDATE: As of Spring Framework 5.3, using .exchange() is deprecated due to potential memory and connection leaks. Prefer .exchangeToMono(), .exchangeToFlux(), or .retrieve() instead.
https://rieckpil.de/spring-webclient-exchange-vs-retrieve-a-comparison/