Skip to content

HTTP Interface Clients should return ResponseEntity even if a 40X or 50X error occurs #33581

@amoffet

Description

@amoffet

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.

Metadata

Metadata

Assignees

Labels

status: declinedA suggestion or change that we don't feel we should currently apply

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions