小编sgc*_*sgc的帖子

Java 8Optional.map.orElse 正在执行 orElse 部分

仅当传入的用户对象不存在于数据库中时才尝试保留用户。该服务通过调用用户存储库中的 findByEmail 方法返回一个Optional。就我而言,数据库中已经存在一个确切的用户,并且对象已正确返回。

但是,在我的控制器中,当我执行Optional.map(user).orElse(persistuser)时,会执行orElse部分。

我的理解是,当Optional.map返回Optional并且用户也存在时,那么orElse应该返回用户,而不是执行persistuser操作。

请帮我解决这个问题。

控制器:

@PostMapping(path = "/addUser", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<Response> addUser(@RequestBody User user){
        
        user = userService.checkIfUserExsits(user.getEmail())
                          .map(usr -> usr)
                          .orElse(userService.persistUser(user));
        
        return respHelpers.prepareSuccessResponse(user,"Processed");                                       
    }
Run Code Online (Sandbox Code Playgroud)

服务:

public Optional<User> checkIfUserExsits(String email){      
    Optional<User> user = Optional.ofNullable(userRepo.findByEmail(email));     
    return user;
}
Run Code Online (Sandbox Code Playgroud)

存储库:

@Repository
public interface UserRepo extends JpaRepository<User, UUID> {

    public User findByEmail(String email); 

}
Run Code Online (Sandbox Code Playgroud)

java-8 spring-boot option-type

1
推荐指数
1
解决办法
7144
查看次数

标签 统计

java-8 ×1

option-type ×1

spring-boot ×1