webflux Mono<T> onErrorReturn 未调用
webflux Mono<T> onErrorReturn not called
这是我的 HandlerFunction
public Mono<ServerResponse> getTime(ServerRequest serverRequest) {
return time(serverRequest).onErrorReturn("some errors has happened !").flatMap(s -> {
// this didn't called
return ServerResponse.ok().contentType(MediaType.TEXT_PLAIN).syncBody(s);
});
}
time(ServerRequest serverRequest)方法是
private Mono<String> time(ServerRequest request) {
String format = DateTimeFormatter.ofPattern("HH:mm:ss").format(LocalDateTime.now());
return Mono.just("time is:" + format + "," + request.queryParam("name").get());
}
当我不使用参数 "name" 时,它会抛出一个 NoSuchElementException;
但是,Mono onErrorReturn 不起作用!
为什么或我做错了什么?
onError...
运算符用于处理管道中发生的错误信号。
在你的例子中,NoSuchElementException
被抛出反应管道,然后任何东西都可以订阅返回的 Mono
。
我认为您可以像这样延迟执行来获得您正在寻找的行为:
private Mono<String> time(ServerRequest request) {
return Mono.defer(() -> {
String format = DateTimeFormatter.ofPattern("HH:mm:ss").format(LocalDateTime.now());
Mono.just("time is:" + format + "," + request.queryParam("name").get());
});
}
这是我的 HandlerFunction
public Mono<ServerResponse> getTime(ServerRequest serverRequest) {
return time(serverRequest).onErrorReturn("some errors has happened !").flatMap(s -> {
// this didn't called
return ServerResponse.ok().contentType(MediaType.TEXT_PLAIN).syncBody(s);
});
}
time(ServerRequest serverRequest)方法是
private Mono<String> time(ServerRequest request) {
String format = DateTimeFormatter.ofPattern("HH:mm:ss").format(LocalDateTime.now());
return Mono.just("time is:" + format + "," + request.queryParam("name").get());
}
当我不使用参数 "name" 时,它会抛出一个 NoSuchElementException; 但是,Mono onErrorReturn 不起作用! 为什么或我做错了什么?
onError...
运算符用于处理管道中发生的错误信号。
在你的例子中,NoSuchElementException
被抛出反应管道,然后任何东西都可以订阅返回的 Mono
。
我认为您可以像这样延迟执行来获得您正在寻找的行为:
private Mono<String> time(ServerRequest request) {
return Mono.defer(() -> {
String format = DateTimeFormatter.ofPattern("HH:mm:ss").format(LocalDateTime.now());
Mono.just("time is:" + format + "," + request.queryParam("name").get());
});
}