Spring webflux webflux Mono<;T>;未调用onErrorReturn

Spring webflux webflux Mono<;T>;未调用onErrorReturn,spring-webflux,Spring Webflux,这是我的手机功能 public Mono<ServerResponse> getTime(ServerRequest serverRequest) { return time(serverRequest).onErrorReturn("some errors has happened !").flatMap(s -> { // this didn't called return ServerResponse.ok().conte

这是我的手机功能

    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);
    });
}
公共Mono getTime(服务器请求服务器请求){ 返回时间(serverRequest).OneErrorReturn(“发生了一些错误!”).flatMap(s->{ //这个电话没打过来 返回ServerResponse.ok().contentType(MediaType.TEXT\u PLAIN).syncBody; }); } 时间(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());
}
专用单声道时间(服务器请求){
String format=DateTimeFormatter.of模式(“HH:mm:ss”).format(LocalDateTime.now());
返回Mono.just(“时间是:“+format+”,“+request.queryParam(“name”).get());
}
当我不使用param“name”时,它将抛出一个NosTouchElementException; 但是,单声道扬声器不工作!
为什么或者我错了什么?

操作员负责处理管道中发生的错误信号

在您的例子中,
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());
    });
}
专用单声道时间(服务器请求){
返回Mono.defer(()->{
String format=DateTimeFormatter.of模式(“HH:mm:ss”).format(LocalDateTime.now());
Mono.just(“时间是:“+format+”,“+request.queryParam(“name”).get());
});
}

非常感谢!它确实有用!我是webflux的新用户!再次感谢你