[英]How to pass method as function with parameters?
我正在使用spring-webflux
来调用外部 web 服务异步,例如:
String param1;
int param2;
webClient.send(...)
.exchange()
.doOnSuccess(rsp -> processResponse(rsp))
.onErrorMap(ex -> processException(ex, param1, param2));
现在我想将实际发送重构为更通用的方法,调用者应该为成功+错误函数提供一个参数。 但是怎么做?
public Mono send(Function success, Function error) {
return webClient.send(...)
.exchange()
.doOnSuccess(success)
.onErrorMap(error);
}
问题:我现在如何将函数传递给我的泛型方法?
它必须类似于下面的伪代码,但我究竟要如何编写函数呢?
public void caller() {
String param1;
int param2;
send(
rsp -> processResponse(rsp),
ex -> processException(ex, param1, param2)
);
}
如果您确实想使用onErrorMap()
(对 map 一个例外,另一个例外),那么:
public Mono<ClientResponse> send(Consumer<? super ClientResponse> success, Function<? super Throwable, ? extends Throwable> error) {
return webClient()
.get()
.uri("http://example.com/")
.exchange()
.doOnSuccess(success)
.onErrorMap(error);
}
send(cr -> processResponse(cr), ex -> mapToAnotherException(ex));
...但听起来你想实际添加一个错误的副作用,这将是doOnError()
代替:
public Mono<ClientResponse> send(Consumer<? super ClientResponse> success, Consumer<? super Throwable> error) {
return webClient()
.get()
.uri("http://example.com/")
.exchange()
.doOnSuccess(success)
.doOnError(error);
}
send(cr -> processResponse(cr), ex -> processException(ex));
但是请注意,现在不推荐使用 exchange( exchange()
- 您现在通常使用exchangeToMono()
代替,提供从客户端响应返回Mono<Foo>
的 function。 (如果你真的想像以前一样只返回一个Mono<ClientResponse>
,你可以只做.exchangeToMono(Mono::just)
代替。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.