【发布时间】:2020-05-07 15:39:42
【问题描述】:
我有很多方法使用 Spring 的 WebClient 中的 onStatus API:
@Override
public Mono<Accommodation> createAccommodation(CreateAccommodation create) {
return webClient
.post()
.contentType(APPLICATION_JSON)
.bodyValue(create)
.retrieve()
.onStatus(HttpStatus::isError,
clientResponse -> clientResponse
.bodyToMono(ApiErrorResponse.class)
.flatMap(errorResponse -> Mono.error(new ResponseStatusException(
HttpStatus.valueOf(errorResponse.getStatus()),
errorResponse.getMessage()
))))
.bodyToMono(Accommodation.class);
}
我想做的是避免在每个 WebClient 调用中都使用“onStatus”。
有没有办法在构建 WebClient 实例时进行设置?你能举一些例子吗?
这是我的 WebClient 实例:
public AccommodationServiceClientImpl(WebClient.Builder builder) {
this.webClient = builder
.baseUrl("lb://accommodation-service/api/v1/accommodations")
.build();
}
【问题讨论】:
-
由于retrieve在Webclient中返回一个私有内部类,你必须用你自己的覆盖
retrieve()的版本来扩展Webclient,并让它返回你自己的ResponseSpec版本 -
实际上,由于某种原因,该包中的所有类似乎都是私有的,所以不要认为你可以......
标签: java spring spring-webflux spring-webclient