给出一个简单的方法,例如
@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 团队后,我发现引发异常是使用 HTTP 客户端接口处理 40X 或 50X 错误的唯一方法。 您可以按照错误处理中所述自定义异常,但无法返回客户端响应。 幸运的是,Spring 和 Spring Boot 提供了许多处理错误的方法。