Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将方法作为带参数的函数传递?_Java_Spring_Spring Webflux_Project Reactor - Fatal编程技术网

Java 如何将方法作为带参数的函数传递?

Java 如何将方法作为带参数的函数传递?,java,spring,spring-webflux,project-reactor,Java,Spring,Spring Webflux,Project Reactor,我使用springwebflux调用外部webservice async,如: String param1; int param2; webClient.send(...) .exchange() .doOnSuccess(rsp -> processResponse(rsp)) .onErrorMap(ex -> processException(ex, param1, param2)); 现在我想将实际发送重构为一个

我使用
springwebflux
调用外部webservice async,如:

String param1;
int param2;

webClient.send(...)
          .exchange()
          .doOnSuccess(rsp -> processResponse(rsp))
          .onErrorMap(ex -> processException(ex, param1, param2));
现在我想将实际发送重构为一个更通用的方法,调用方应该提供success+error函数和参数。但是怎么做呢

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()
(将一个异常映射到另一个异常),那么:

但是,请注意,
exchange()
现在已被弃用-您现在通常使用
exchangeTomonio()
,提供一个从客户端响应返回
Mono
的函数。(如果你真的想像以前一样只返回一个
Mono
,你可以改为执行
.exchangeToMono(Mono::just)
。)

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));
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));