-
Notifications
You must be signed in to change notification settings - Fork 38.8k
Description
Affects: Spring Web 6.1.X
Given a simple method in FooInterface such as
@GetExchange("/foo")
Mono<ResponseEntity<Foo>> getFoo();
with a 'standard' WebClient backing it.
The factory is also 'generic':
HttpServiceProxyFactory factory = HttpServiceProxyFactory
.builderFor(WebClientAdapter.create(webClient))
.build();
return factory.createClient(FooInterface.class);
When the client is used and a 40X or 50X response occurs, then the WebClient throws a WebClientResponseException - which is unexpected - as I would think that having specified Mono<ResponseEntity<Foo>> as the return type would have returned a ResponseEntity with status 40X or 50X (acknowledging the reactive component of this).
Looking at the factory code, it is aware of the return type, and therefore I would expect a response that is consistent with the declared return type - in other words, a Mono<ResponseEntity<Foo>>.
I have not found a way to work around this - meaning obtaining a behavior consistent with the return type - in the same manner that exchange() would work. This is another odd part of this, as exchange() is deprecated and we now work with exchangeToMono() - which is distinctly a client feature that seems too low level to be a part of HTTP interface clients. So maybe - works as designed?
Instead, I've had to use the normal handling of errors to 'coerce' the behavior I want for a given method. With this, I can do what I want, but it seems this may be a bug - or something that can be clarified in the documentation.