即使存在客户端 40X 或 50X 错误,如何让 Http 客户端接口返回 ResponseEntity

问题描述 投票:0回答:1

给出一个简单的方法,例如

  @GetExchange("/foo")
  Mono<ResponseEntity<List<Foo>>> getFoos();

FooInterface
,有“标准”WebClient 支持。

工厂也是‘通用’的:

    HttpServiceProxyFactory factory = HttpServiceProxyFactory
      .builderFor(WebClientAdapter.create(webClient))
      .build();

    return factory.createClient(FooInterface.class);

当使用客户端并发生 40X 或 50X 响应时,WebClient 会抛出

WebClientResponseException
- 这是意外的 - 因为我认为指定
Mono<ResponseEntity<List<Foo>>>
作为返回类型将返回状态为 40X 或的 ResponseEntity 50X.

工厂似乎更喜欢

retrieve
而不是
exchange
,尽管注释是
GetExchange

我还没有找到通过配置影响此行为的方法。 这似乎是一个错误。 我可以更改代码以响应异常并将其重新映射到 ResponseEntity,但这对我来说似乎很奇怪。

我刚刚开始研究 Spring Web 代码以获得洞察力,但我想我应该把它扔给专家。 有谁熟悉如何设置吗?

spring spring-boot spring-mvc spring-webflux spring-webclient
1个回答
0
投票

在咨询了 Spring 团队后,我发现引发异常是使用 HTTP 客户端接口处理 40X 或 50X 错误的唯一方法。 您可以按照错误处理中所述自定义异常,但无法返回客户端响应。 幸运的是,Spring 和 Spring Boot 提供了许多处理错误的方法。

© www.soinside.com 2019 - 2024. All rights reserved.