Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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 SpringWebFlux中单声道序列的奇怪执行_Java_Spring_Spring Boot_Spring Webflux_Project Reactor - Fatal编程技术网

Java SpringWebFlux中单声道序列的奇怪执行

Java SpringWebFlux中单声道序列的奇怪执行,java,spring,spring-boot,spring-webflux,project-reactor,Java,Spring,Spring Boot,Spring Webflux,Project Reactor,我有一个场景,我在Mono序列中调用一个方法,根据调用序列的方式,我要么得到一个错误,要么序列成功 成功序列: @Override public Mono<User> getUserDetails(String userId) { return reactiveValueOps .get(userId) .switchIfEmpty(userService.getUser(Long.valueOf(use

我有一个场景,我在Mono序列中调用一个方法,根据调用序列的方式,我要么得到一个错误,要么序列成功

成功序列:

    @Override
    public Mono<User> getUserDetails(String userId) {
        return reactiveValueOps
            .get(userId)
            .switchIfEmpty(userService.getUser(Long.valueOf(userId))
                .flatMap(this::setUserDetails));
    }

    @Override
    public Mono<User> setUserDetails(User user) {
        return reactiveValueOps
            .set(String.valueOf(user.getId()), user, Duration.ofDays(SESSION_PERSISTENCE_DURATION))
            .flatMap(b -> Mono.just(user));
    }
    @Override
    public Mono<User> getUserDetails(String userId) {
        return reactiveValueOps
            .get(userId)
            .switchIfEmpty(Mono.defer(() -> {
                Mono<User> user = userService.getUser(Long.valueOf(userId));
                Mono<Boolean> valueSet = setUserDetails(user);
                return valueSet.zipWith(user, (v, u) -> u);
            }));
    }

    @Override
    public Mono<Boolean> setUserDetails(Mono<User> user) {
        return user.switchIfEmpty(Mono.defer(() ->
            Mono.error(new UnsupportedOperationException("Cannot persist empty User Object"))))
            .flatMap(u -> reactiveValueOps.set(String.valueOf(u.getId()), u, Duration.ofDays(1L)));
    }
@覆盖
公共Mono getUserDetails(字符串用户ID){
返回反应值操作
.get(用户ID)
.switchIfEmpty(userService.getUser(Long.valueOf(userId))
.flatMap(this::setUserDetails));
}
@凌驾
公共Mono setUserDetails(用户){
返回反应值操作
.set(String.valueOf(user.getId()),user,Duration.ofDays(SESSION\u PERSISTENCE\u Duration))
.flatMap(b->Mono.just(用户));
}
错误顺序:

    @Override
    public Mono<User> getUserDetails(String userId) {
        return reactiveValueOps
            .get(userId)
            .switchIfEmpty(userService.getUser(Long.valueOf(userId))
                .flatMap(this::setUserDetails));
    }

    @Override
    public Mono<User> setUserDetails(User user) {
        return reactiveValueOps
            .set(String.valueOf(user.getId()), user, Duration.ofDays(SESSION_PERSISTENCE_DURATION))
            .flatMap(b -> Mono.just(user));
    }
    @Override
    public Mono<User> getUserDetails(String userId) {
        return reactiveValueOps
            .get(userId)
            .switchIfEmpty(Mono.defer(() -> {
                Mono<User> user = userService.getUser(Long.valueOf(userId));
                Mono<Boolean> valueSet = setUserDetails(user);
                return valueSet.zipWith(user, (v, u) -> u);
            }));
    }

    @Override
    public Mono<Boolean> setUserDetails(Mono<User> user) {
        return user.switchIfEmpty(Mono.defer(() ->
            Mono.error(new UnsupportedOperationException("Cannot persist empty User Object"))))
            .flatMap(u -> reactiveValueOps.set(String.valueOf(u.getId()), u, Duration.ofDays(1L)));
    }
@覆盖
公共Mono getUserDetails(字符串用户ID){
返回反应值操作
.get(用户ID)
.switchIfEmpty(单声道延迟)(()->{
Mono user=userService.getUser(Long.valueOf(userId));
Mono valueSet=setUserDetails(用户);
返回值集.zipWith(用户,(v,u)->u);
}));
}
@凌驾
公共Mono setUserDetails(Mono用户){
返回user.switchIfEmpty(Mono.defer)(()->
Mono.error(新的UnsupportedOperationException(“无法持久化空用户对象”))
.flatMap(u->reactiveValueOps.set(String.valueOf(u.getId()),u,Duration.ofDays(1L));
}
userService.getUser
方法要么从DB返回用户,要么创建一个从第三方API获取详细信息的新用户,在第二个序列中,我得到以下错误:

错误:重复的键值违反了唯一约束
仅当用户尚未出现在数据库中时,才会发生此错误;如果用户未出现在数据库中,则不会出现问题,并且仅针对第二个执行流。
当我使用
zipWith
时,是否发生了错误?

此处是否需要一些额外的或被剪断的代码?此处是否需要一些额外的或被剪断的代码?